#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 r53172 = x;
        float r53173 = y;
        float r53174 = z;
        float r53175 = t;
        float r53176 = r53174 * r53175;
        float r53177 = r53173 - r53176;
        float r53178 = r53172 / r53177;
        return r53178;
}

double f_id(double x, double y, double z, double t) {
        double r53179 = x;
        double r53180 = y;
        double r53181 = z;
        double r53182 = t;
        double r53183 = r53181 * r53182;
        double r53184 = r53180 - r53183;
        double r53185 = r53179 / r53184;
        return r53185;
}


double f_of(float x, float y, float z, float t) {
        float r53186 = x;
        float r53187 = y;
        float r53188 = z;
        float r53189 = t;
        float r53190 = r53188 * r53189;
        float r53191 = r53187 - r53190;
        float r53192 = r53186 / r53191;
        return r53192;
}

double f_od(double x, double y, double z, double t) {
        double r53193 = x;
        double r53194 = y;
        double r53195 = z;
        double r53196 = t;
        double r53197 = r53195 * r53196;
        double r53198 = r53194 - r53197;
        double r53199 = r53193 / r53198;
        return r53199;
}

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 r53200, r53201, r53202, r53203, r53204, r53205, r53206;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53200);
        mpfr_init(r53201);
        mpfr_init(r53202);
        mpfr_init(r53203);
        mpfr_init(r53204);
        mpfr_init(r53205);
        mpfr_init(r53206);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r53200, x, MPFR_RNDN);
        mpfr_set_d(r53201, y, MPFR_RNDN);
        mpfr_set_d(r53202, z, MPFR_RNDN);
        mpfr_set_d(r53203, t, MPFR_RNDN);
        mpfr_mul(r53204, r53202, r53203, MPFR_RNDN);
        mpfr_sub(r53205, r53201, r53204, MPFR_RNDN);
        mpfr_div(r53206, r53200, r53205, MPFR_RNDN);
        return mpfr_get_d(r53206, MPFR_RNDN);
}

static mpfr_t r53207, r53208, r53209, r53210, r53211, r53212, r53213;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53207);
        mpfr_init(r53208);
        mpfr_init(r53209);
        mpfr_init(r53210);
        mpfr_init(r53211);
        mpfr_init(r53212);
        mpfr_init(r53213);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r53207, x, MPFR_RNDN);
        mpfr_set_d(r53208, y, MPFR_RNDN);
        mpfr_set_d(r53209, z, MPFR_RNDN);
        mpfr_set_d(r53210, t, MPFR_RNDN);
        mpfr_mul(r53211, r53209, r53210, MPFR_RNDN);
        mpfr_sub(r53212, r53208, r53211, MPFR_RNDN);
        mpfr_div(r53213, r53207, r53212, MPFR_RNDN);
        return mpfr_get_d(r53213, MPFR_RNDN);
}

static mpfr_t r53214, r53215, r53216, r53217, r53218, r53219, r53220;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53214);
        mpfr_init(r53215);
        mpfr_init(r53216);
        mpfr_init(r53217);
        mpfr_init(r53218);
        mpfr_init(r53219);
        mpfr_init(r53220);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r53214, x, MPFR_RNDN);
        mpfr_set_d(r53215, y, MPFR_RNDN);
        mpfr_set_d(r53216, z, MPFR_RNDN);
        mpfr_set_d(r53217, t, MPFR_RNDN);
        mpfr_mul(r53218, r53216, r53217, MPFR_RNDN);
        mpfr_sub(r53219, r53215, r53218, MPFR_RNDN);
        mpfr_div(r53220, r53214, r53219, MPFR_RNDN);
        return mpfr_get_d(r53220, MPFR_RNDN);
}

