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

double f_if(float x, float y, float z, float t, float a) {
        float r51478 = x;
        float r51479 = y;
        float r51480 = z;
        float r51481 = r51479 * r51480;
        float r51482 = r51478 - r51481;
        float r51483 = t;
        float r51484 = a;
        float r51485 = r51484 * r51480;
        float r51486 = r51483 - r51485;
        float r51487 = r51482 / r51486;
        return r51487;
}

double f_id(double x, double y, double z, double t, double a) {
        double r51488 = x;
        double r51489 = y;
        double r51490 = z;
        double r51491 = r51489 * r51490;
        double r51492 = r51488 - r51491;
        double r51493 = t;
        double r51494 = a;
        double r51495 = r51494 * r51490;
        double r51496 = r51493 - r51495;
        double r51497 = r51492 / r51496;
        return r51497;
}


double f_of(float x, float y, float z, float t, float a) {
        float r51498 = z;
        float r51499 = -2.5926369593026417e+19f;
        bool r51500 = r51498 <= r51499;
        float r51501 = x;
        float r51502 = t;
        float r51503 = a;
        float r51504 = r51503 * r51498;
        float r51505 = r51502 - r51504;
        float r51506 = r51501 / r51505;
        float r51507 = y;
        float r51508 = r51502 / r51498;
        float r51509 = r51508 - r51503;
        float r51510 = r51507 / r51509;
        float r51511 = r51506 - r51510;
        float r51512 = 4.0102291809654423e-147f;
        bool r51513 = r51498 <= r51512;
        float r51514 = r51507 * r51498;
        float r51515 = r51501 - r51514;
        float r51516 = r51515 / r51505;
        float r51517 = r51513 ? r51516 : r51511;
        float r51518 = r51500 ? r51511 : r51517;
        return r51518;
}

double f_od(double x, double y, double z, double t, double a) {
        double r51519 = z;
        double r51520 = -2.5926369593026417e+19;
        bool r51521 = r51519 <= r51520;
        double r51522 = x;
        double r51523 = t;
        double r51524 = a;
        double r51525 = r51524 * r51519;
        double r51526 = r51523 - r51525;
        double r51527 = r51522 / r51526;
        double r51528 = y;
        double r51529 = r51523 / r51519;
        double r51530 = r51529 - r51524;
        double r51531 = r51528 / r51530;
        double r51532 = r51527 - r51531;
        double r51533 = 4.0102291809654423e-147;
        bool r51534 = r51519 <= r51533;
        double r51535 = r51528 * r51519;
        double r51536 = r51522 - r51535;
        double r51537 = r51536 / r51526;
        double r51538 = r51534 ? r51537 : r51532;
        double r51539 = r51521 ? r51532 : r51538;
        return r51539;
}

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 r51540, r51541, r51542, r51543, r51544, r51545, r51546, r51547, r51548, r51549;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r51540);
        mpfr_init(r51541);
        mpfr_init(r51542);
        mpfr_init(r51543);
        mpfr_init(r51544);
        mpfr_init(r51545);
        mpfr_init(r51546);
        mpfr_init(r51547);
        mpfr_init(r51548);
        mpfr_init(r51549);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r51540, x, MPFR_RNDN);
        mpfr_set_d(r51541, y, MPFR_RNDN);
        mpfr_set_d(r51542, z, MPFR_RNDN);
        mpfr_mul(r51543, r51541, r51542, MPFR_RNDN);
        mpfr_sub(r51544, r51540, r51543, MPFR_RNDN);
        mpfr_set_d(r51545, t, MPFR_RNDN);
        mpfr_set_d(r51546, a, MPFR_RNDN);
        mpfr_mul(r51547, r51546, r51542, MPFR_RNDN);
        mpfr_sub(r51548, r51545, r51547, MPFR_RNDN);
        mpfr_div(r51549, r51544, r51548, MPFR_RNDN);
        return mpfr_get_d(r51549, MPFR_RNDN);
}

static mpfr_t r51550, r51551, r51552, r51553, r51554, r51555, r51556, r51557, r51558, r51559, r51560, r51561, r51562, r51563, r51564, r51565, r51566, r51567, r51568, r51569, r51570;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r51550);
        mpfr_init_set_str(r51551, "-2.5926369593026417e+19", 10, MPFR_RNDN);
        mpfr_init(r51552);
        mpfr_init(r51553);
        mpfr_init(r51554);
        mpfr_init(r51555);
        mpfr_init(r51556);
        mpfr_init(r51557);
        mpfr_init(r51558);
        mpfr_init(r51559);
        mpfr_init(r51560);
        mpfr_init(r51561);
        mpfr_init(r51562);
        mpfr_init(r51563);
        mpfr_init_set_str(r51564, "4.0102291809654423e-147", 10, MPFR_RNDN);
        mpfr_init(r51565);
        mpfr_init(r51566);
        mpfr_init(r51567);
        mpfr_init(r51568);
        mpfr_init(r51569);
        mpfr_init(r51570);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r51550, z, MPFR_RNDN);
        ;
        mpfr_set_si(r51552, mpfr_cmp(r51550, r51551) <= 0, MPFR_RNDN);
        mpfr_set_d(r51553, x, MPFR_RNDN);
        mpfr_set_d(r51554, t, MPFR_RNDN);
        mpfr_set_d(r51555, a, MPFR_RNDN);
        mpfr_mul(r51556, r51555, r51550, MPFR_RNDN);
        mpfr_sub(r51557, r51554, r51556, MPFR_RNDN);
        mpfr_div(r51558, r51553, r51557, MPFR_RNDN);
        mpfr_set_d(r51559, y, MPFR_RNDN);
        mpfr_div(r51560, r51554, r51550, MPFR_RNDN);
        mpfr_sub(r51561, r51560, r51555, MPFR_RNDN);
        mpfr_div(r51562, r51559, r51561, MPFR_RNDN);
        mpfr_sub(r51563, r51558, r51562, MPFR_RNDN);
        ;
        mpfr_set_si(r51565, mpfr_cmp(r51550, r51564) <= 0, MPFR_RNDN);
        mpfr_mul(r51566, r51559, r51550, MPFR_RNDN);
        mpfr_sub(r51567, r51553, r51566, MPFR_RNDN);
        mpfr_div(r51568, r51567, r51557, MPFR_RNDN);
        if (mpfr_get_si(r51565, MPFR_RNDN)) { mpfr_set(r51569, r51568, MPFR_RNDN); } else { mpfr_set(r51569, r51563, MPFR_RNDN); };
        if (mpfr_get_si(r51552, MPFR_RNDN)) { mpfr_set(r51570, r51563, MPFR_RNDN); } else { mpfr_set(r51570, r51569, MPFR_RNDN); };
        return mpfr_get_d(r51570, MPFR_RNDN);
}

static mpfr_t r51571, r51572, r51573, r51574, r51575, r51576, r51577, r51578, r51579, r51580, r51581, r51582, r51583, r51584, r51585, r51586, r51587, r51588, r51589, r51590, r51591;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r51571);
        mpfr_init_set_str(r51572, "-2.5926369593026417e+19", 10, MPFR_RNDN);
        mpfr_init(r51573);
        mpfr_init(r51574);
        mpfr_init(r51575);
        mpfr_init(r51576);
        mpfr_init(r51577);
        mpfr_init(r51578);
        mpfr_init(r51579);
        mpfr_init(r51580);
        mpfr_init(r51581);
        mpfr_init(r51582);
        mpfr_init(r51583);
        mpfr_init(r51584);
        mpfr_init_set_str(r51585, "4.0102291809654423e-147", 10, MPFR_RNDN);
        mpfr_init(r51586);
        mpfr_init(r51587);
        mpfr_init(r51588);
        mpfr_init(r51589);
        mpfr_init(r51590);
        mpfr_init(r51591);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r51571, z, MPFR_RNDN);
        ;
        mpfr_set_si(r51573, mpfr_cmp(r51571, r51572) <= 0, MPFR_RNDN);
        mpfr_set_d(r51574, x, MPFR_RNDN);
        mpfr_set_d(r51575, t, MPFR_RNDN);
        mpfr_set_d(r51576, a, MPFR_RNDN);
        mpfr_mul(r51577, r51576, r51571, MPFR_RNDN);
        mpfr_sub(r51578, r51575, r51577, MPFR_RNDN);
        mpfr_div(r51579, r51574, r51578, MPFR_RNDN);
        mpfr_set_d(r51580, y, MPFR_RNDN);
        mpfr_div(r51581, r51575, r51571, MPFR_RNDN);
        mpfr_sub(r51582, r51581, r51576, MPFR_RNDN);
        mpfr_div(r51583, r51580, r51582, MPFR_RNDN);
        mpfr_sub(r51584, r51579, r51583, MPFR_RNDN);
        ;
        mpfr_set_si(r51586, mpfr_cmp(r51571, r51585) <= 0, MPFR_RNDN);
        mpfr_mul(r51587, r51580, r51571, MPFR_RNDN);
        mpfr_sub(r51588, r51574, r51587, MPFR_RNDN);
        mpfr_div(r51589, r51588, r51578, MPFR_RNDN);
        if (mpfr_get_si(r51586, MPFR_RNDN)) { mpfr_set(r51590, r51589, MPFR_RNDN); } else { mpfr_set(r51590, r51584, MPFR_RNDN); };
        if (mpfr_get_si(r51573, MPFR_RNDN)) { mpfr_set(r51591, r51584, MPFR_RNDN); } else { mpfr_set(r51591, r51590, MPFR_RNDN); };
        return mpfr_get_d(r51591, MPFR_RNDN);
}

