#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 r52305 = x;
        float r52306 = y;
        float r52307 = z;
        float r52308 = t;
        float r52309 = r52307 * r52308;
        float r52310 = r52306 - r52309;
        float r52311 = r52305 / r52310;
        return r52311;
}

double f_id(double x, double y, double z, double t) {
        double r52312 = x;
        double r52313 = y;
        double r52314 = z;
        double r52315 = t;
        double r52316 = r52314 * r52315;
        double r52317 = r52313 - r52316;
        double r52318 = r52312 / r52317;
        return r52318;
}


double f_of(float x, float y, float z, float t) {
        float r52319 = x;
        float r52320 = y;
        float r52321 = z;
        float r52322 = t;
        float r52323 = r52321 * r52322;
        float r52324 = r52320 - r52323;
        float r52325 = r52319 / r52324;
        return r52325;
}

double f_od(double x, double y, double z, double t) {
        double r52326 = x;
        double r52327 = y;
        double r52328 = z;
        double r52329 = t;
        double r52330 = r52328 * r52329;
        double r52331 = r52327 - r52330;
        double r52332 = r52326 / r52331;
        return r52332;
}

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 r52333, r52334, r52335, r52336, r52337, r52338, r52339;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52333);
        mpfr_init(r52334);
        mpfr_init(r52335);
        mpfr_init(r52336);
        mpfr_init(r52337);
        mpfr_init(r52338);
        mpfr_init(r52339);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r52333, x, MPFR_RNDN);
        mpfr_set_d(r52334, y, MPFR_RNDN);
        mpfr_set_d(r52335, z, MPFR_RNDN);
        mpfr_set_d(r52336, t, MPFR_RNDN);
        mpfr_mul(r52337, r52335, r52336, MPFR_RNDN);
        mpfr_sub(r52338, r52334, r52337, MPFR_RNDN);
        mpfr_div(r52339, r52333, r52338, MPFR_RNDN);
        return mpfr_get_d(r52339, MPFR_RNDN);
}

static mpfr_t r52340, r52341, r52342, r52343, r52344, r52345, r52346;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52340);
        mpfr_init(r52341);
        mpfr_init(r52342);
        mpfr_init(r52343);
        mpfr_init(r52344);
        mpfr_init(r52345);
        mpfr_init(r52346);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r52340, x, MPFR_RNDN);
        mpfr_set_d(r52341, y, MPFR_RNDN);
        mpfr_set_d(r52342, z, MPFR_RNDN);
        mpfr_set_d(r52343, t, MPFR_RNDN);
        mpfr_mul(r52344, r52342, r52343, MPFR_RNDN);
        mpfr_sub(r52345, r52341, r52344, MPFR_RNDN);
        mpfr_div(r52346, r52340, r52345, MPFR_RNDN);
        return mpfr_get_d(r52346, MPFR_RNDN);
}

static mpfr_t r52347, r52348, r52349, r52350, r52351, r52352, r52353;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52347);
        mpfr_init(r52348);
        mpfr_init(r52349);
        mpfr_init(r52350);
        mpfr_init(r52351);
        mpfr_init(r52352);
        mpfr_init(r52353);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r52347, x, MPFR_RNDN);
        mpfr_set_d(r52348, y, MPFR_RNDN);
        mpfr_set_d(r52349, z, MPFR_RNDN);
        mpfr_set_d(r52350, t, MPFR_RNDN);
        mpfr_mul(r52351, r52349, r52350, MPFR_RNDN);
        mpfr_sub(r52352, r52348, r52351, MPFR_RNDN);
        mpfr_div(r52353, r52347, r52352, MPFR_RNDN);
        return mpfr_get_d(r52353, MPFR_RNDN);
}

