#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, C";

double f_if(float x, float y, float z) {
        float r52270 = x;
        float r52271 = y;
        float r52272 = z;
        float r52273 = r52271 * r52272;
        float r52274 = r52270 - r52273;
        return r52274;
}

double f_id(double x, double y, double z) {
        double r52275 = x;
        double r52276 = y;
        double r52277 = z;
        double r52278 = r52276 * r52277;
        double r52279 = r52275 - r52278;
        return r52279;
}


double f_of(float x, float y, float z) {
        float r52280 = x;
        float r52281 = y;
        float r52282 = z;
        float r52283 = r52281 * r52282;
        float r52284 = r52280 - r52283;
        return r52284;
}

double f_od(double x, double y, double z) {
        double r52285 = x;
        double r52286 = y;
        double r52287 = z;
        double r52288 = r52286 * r52287;
        double r52289 = r52285 - r52288;
        return r52289;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r52290, r52291, r52292, r52293, r52294;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52290);
        mpfr_init(r52291);
        mpfr_init(r52292);
        mpfr_init(r52293);
        mpfr_init(r52294);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r52290, x, MPFR_RNDN);
        mpfr_set_d(r52291, y, MPFR_RNDN);
        mpfr_set_d(r52292, z, MPFR_RNDN);
        mpfr_mul(r52293, r52291, r52292, MPFR_RNDN);
        mpfr_sub(r52294, r52290, r52293, MPFR_RNDN);
        return mpfr_get_d(r52294, MPFR_RNDN);
}

static mpfr_t r52295, r52296, r52297, r52298, r52299;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52295);
        mpfr_init(r52296);
        mpfr_init(r52297);
        mpfr_init(r52298);
        mpfr_init(r52299);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r52295, x, MPFR_RNDN);
        mpfr_set_d(r52296, y, MPFR_RNDN);
        mpfr_set_d(r52297, z, MPFR_RNDN);
        mpfr_mul(r52298, r52296, r52297, MPFR_RNDN);
        mpfr_sub(r52299, r52295, r52298, MPFR_RNDN);
        return mpfr_get_d(r52299, MPFR_RNDN);
}

static mpfr_t r52300, r52301, r52302, r52303, r52304;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52300);
        mpfr_init(r52301);
        mpfr_init(r52302);
        mpfr_init(r52303);
        mpfr_init(r52304);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r52300, x, MPFR_RNDN);
        mpfr_set_d(r52301, y, MPFR_RNDN);
        mpfr_set_d(r52302, z, MPFR_RNDN);
        mpfr_mul(r52303, r52301, r52302, MPFR_RNDN);
        mpfr_sub(r52304, r52300, r52303, MPFR_RNDN);
        return mpfr_get_d(r52304, MPFR_RNDN);
}

