#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, B";

double f_if(float x, float y, float z, float t) {
        float r53134 = x;
        float r53135 = y;
        float r53136 = z;
        float r53137 = t;
        float r53138 = r53136 * r53137;
        float r53139 = r53135 - r53138;
        float r53140 = r53134 / r53139;
        return r53140;
}

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


double f_of(float x, float y, float z, float t) {
        float r53148 = x;
        float r53149 = y;
        float r53150 = z;
        float r53151 = t;
        float r53152 = r53150 * r53151;
        float r53153 = r53149 - r53152;
        float r53154 = r53148 / r53153;
        return r53154;
}

double f_od(double x, double y, double z, double t) {
        double r53155 = x;
        double r53156 = y;
        double r53157 = z;
        double r53158 = t;
        double r53159 = r53157 * r53158;
        double r53160 = r53156 - r53159;
        double r53161 = r53155 / r53160;
        return r53161;
}

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 r53162, r53163, r53164, r53165, r53166, r53167, r53168;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53162);
        mpfr_init(r53163);
        mpfr_init(r53164);
        mpfr_init(r53165);
        mpfr_init(r53166);
        mpfr_init(r53167);
        mpfr_init(r53168);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r53162, x, MPFR_RNDN);
        mpfr_set_d(r53163, y, MPFR_RNDN);
        mpfr_set_d(r53164, z, MPFR_RNDN);
        mpfr_set_d(r53165, t, MPFR_RNDN);
        mpfr_mul(r53166, r53164, r53165, MPFR_RNDN);
        mpfr_sub(r53167, r53163, r53166, MPFR_RNDN);
        mpfr_div(r53168, r53162, r53167, MPFR_RNDN);
        return mpfr_get_d(r53168, MPFR_RNDN);
}

static mpfr_t r53169, r53170, r53171, r53172, r53173, r53174, r53175;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53169);
        mpfr_init(r53170);
        mpfr_init(r53171);
        mpfr_init(r53172);
        mpfr_init(r53173);
        mpfr_init(r53174);
        mpfr_init(r53175);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r53169, x, MPFR_RNDN);
        mpfr_set_d(r53170, y, MPFR_RNDN);
        mpfr_set_d(r53171, z, MPFR_RNDN);
        mpfr_set_d(r53172, t, MPFR_RNDN);
        mpfr_mul(r53173, r53171, r53172, MPFR_RNDN);
        mpfr_sub(r53174, r53170, r53173, MPFR_RNDN);
        mpfr_div(r53175, r53169, r53174, MPFR_RNDN);
        return mpfr_get_d(r53175, MPFR_RNDN);
}

static mpfr_t r53176, r53177, r53178, r53179, r53180, r53181, r53182;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53176);
        mpfr_init(r53177);
        mpfr_init(r53178);
        mpfr_init(r53179);
        mpfr_init(r53180);
        mpfr_init(r53181);
        mpfr_init(r53182);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r53176, x, MPFR_RNDN);
        mpfr_set_d(r53177, y, MPFR_RNDN);
        mpfr_set_d(r53178, z, MPFR_RNDN);
        mpfr_set_d(r53179, t, MPFR_RNDN);
        mpfr_mul(r53180, r53178, r53179, MPFR_RNDN);
        mpfr_sub(r53181, r53177, r53180, MPFR_RNDN);
        mpfr_div(r53182, r53176, r53181, MPFR_RNDN);
        return mpfr_get_d(r53182, MPFR_RNDN);
}

