#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 r53137 = x;
        float r53138 = y;
        float r53139 = z;
        float r53140 = r53138 * r53139;
        float r53141 = r53137 - r53140;
        return r53141;
}

double f_id(double x, double y, double z) {
        double r53142 = x;
        double r53143 = y;
        double r53144 = z;
        double r53145 = r53143 * r53144;
        double r53146 = r53142 - r53145;
        return r53146;
}


double f_of(float x, float y, float z) {
        float r53147 = x;
        float r53148 = y;
        float r53149 = z;
        float r53150 = r53148 * r53149;
        float r53151 = r53147 - r53150;
        return r53151;
}

double f_od(double x, double y, double z) {
        double r53152 = x;
        double r53153 = y;
        double r53154 = z;
        double r53155 = r53153 * r53154;
        double r53156 = r53152 - r53155;
        return r53156;
}

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 r53157, r53158, r53159, r53160, r53161;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53157);
        mpfr_init(r53158);
        mpfr_init(r53159);
        mpfr_init(r53160);
        mpfr_init(r53161);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r53157, x, MPFR_RNDN);
        mpfr_set_d(r53158, y, MPFR_RNDN);
        mpfr_set_d(r53159, z, MPFR_RNDN);
        mpfr_mul(r53160, r53158, r53159, MPFR_RNDN);
        mpfr_sub(r53161, r53157, r53160, MPFR_RNDN);
        return mpfr_get_d(r53161, MPFR_RNDN);
}

static mpfr_t r53162, r53163, r53164, r53165, r53166;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53162);
        mpfr_init(r53163);
        mpfr_init(r53164);
        mpfr_init(r53165);
        mpfr_init(r53166);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r53162, x, MPFR_RNDN);
        mpfr_set_d(r53163, y, MPFR_RNDN);
        mpfr_set_d(r53164, z, MPFR_RNDN);
        mpfr_mul(r53165, r53163, r53164, MPFR_RNDN);
        mpfr_sub(r53166, r53162, r53165, MPFR_RNDN);
        return mpfr_get_d(r53166, MPFR_RNDN);
}

static mpfr_t r53167, r53168, r53169, r53170, r53171;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53167);
        mpfr_init(r53168);
        mpfr_init(r53169);
        mpfr_init(r53170);
        mpfr_init(r53171);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r53167, x, MPFR_RNDN);
        mpfr_set_d(r53168, y, MPFR_RNDN);
        mpfr_set_d(r53169, z, MPFR_RNDN);
        mpfr_mul(r53170, r53168, r53169, MPFR_RNDN);
        mpfr_sub(r53171, r53167, r53170, MPFR_RNDN);
        return mpfr_get_d(r53171, MPFR_RNDN);
}

