#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 r53394 = x;
        float r53395 = y;
        float r53396 = z;
        float r53397 = t;
        float r53398 = r53396 * r53397;
        float r53399 = r53395 - r53398;
        float r53400 = r53394 / r53399;
        return r53400;
}

double f_id(double x, double y, double z, double t) {
        double r53401 = x;
        double r53402 = y;
        double r53403 = z;
        double r53404 = t;
        double r53405 = r53403 * r53404;
        double r53406 = r53402 - r53405;
        double r53407 = r53401 / r53406;
        return r53407;
}


double f_of(float x, float y, float z, float t) {
        float r53408 = x;
        float r53409 = y;
        float r53410 = z;
        float r53411 = t;
        float r53412 = r53410 * r53411;
        float r53413 = r53409 - r53412;
        float r53414 = r53408 / r53413;
        return r53414;
}

double f_od(double x, double y, double z, double t) {
        double r53415 = x;
        double r53416 = y;
        double r53417 = z;
        double r53418 = t;
        double r53419 = r53417 * r53418;
        double r53420 = r53416 - r53419;
        double r53421 = r53415 / r53420;
        return r53421;
}

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 r53422, r53423, r53424, r53425, r53426, r53427, r53428;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53422);
        mpfr_init(r53423);
        mpfr_init(r53424);
        mpfr_init(r53425);
        mpfr_init(r53426);
        mpfr_init(r53427);
        mpfr_init(r53428);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r53422, x, MPFR_RNDN);
        mpfr_set_d(r53423, y, MPFR_RNDN);
        mpfr_set_d(r53424, z, MPFR_RNDN);
        mpfr_set_d(r53425, t, MPFR_RNDN);
        mpfr_mul(r53426, r53424, r53425, MPFR_RNDN);
        mpfr_sub(r53427, r53423, r53426, MPFR_RNDN);
        mpfr_div(r53428, r53422, r53427, MPFR_RNDN);
        return mpfr_get_d(r53428, MPFR_RNDN);
}

static mpfr_t r53429, r53430, r53431, r53432, r53433, r53434, r53435;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53429);
        mpfr_init(r53430);
        mpfr_init(r53431);
        mpfr_init(r53432);
        mpfr_init(r53433);
        mpfr_init(r53434);
        mpfr_init(r53435);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r53429, x, MPFR_RNDN);
        mpfr_set_d(r53430, y, MPFR_RNDN);
        mpfr_set_d(r53431, z, MPFR_RNDN);
        mpfr_set_d(r53432, t, MPFR_RNDN);
        mpfr_mul(r53433, r53431, r53432, MPFR_RNDN);
        mpfr_sub(r53434, r53430, r53433, MPFR_RNDN);
        mpfr_div(r53435, r53429, r53434, MPFR_RNDN);
        return mpfr_get_d(r53435, MPFR_RNDN);
}

static mpfr_t r53436, r53437, r53438, r53439, r53440, r53441, r53442;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53436);
        mpfr_init(r53437);
        mpfr_init(r53438);
        mpfr_init(r53439);
        mpfr_init(r53440);
        mpfr_init(r53441);
        mpfr_init(r53442);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r53436, x, MPFR_RNDN);
        mpfr_set_d(r53437, y, MPFR_RNDN);
        mpfr_set_d(r53438, z, MPFR_RNDN);
        mpfr_set_d(r53439, t, MPFR_RNDN);
        mpfr_mul(r53440, r53438, r53439, MPFR_RNDN);
        mpfr_sub(r53441, r53437, r53440, MPFR_RNDN);
        mpfr_div(r53442, r53436, r53441, MPFR_RNDN);
        return mpfr_get_d(r53442, MPFR_RNDN);
}

