#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 r53415 = x;
        float r53416 = y;
        float r53417 = z;
        float r53418 = r53416 * r53417;
        float r53419 = r53415 - r53418;
        float r53420 = t;
        float r53421 = a;
        float r53422 = r53421 * r53417;
        float r53423 = r53420 - r53422;
        float r53424 = r53419 / r53423;
        return r53424;
}

double f_id(double x, double y, double z, double t, double a) {
        double r53425 = x;
        double r53426 = y;
        double r53427 = z;
        double r53428 = r53426 * r53427;
        double r53429 = r53425 - r53428;
        double r53430 = t;
        double r53431 = a;
        double r53432 = r53431 * r53427;
        double r53433 = r53430 - r53432;
        double r53434 = r53429 / r53433;
        return r53434;
}


double f_of(float x, float y, float z, float t, float a) {
        float r53435 = z;
        float r53436 = -1.682586378158885e-40;
        bool r53437 = r53435 <= r53436;
        float r53438 = x;
        float r53439 = t;
        float r53440 = a;
        float r53441 = r53440 * r53435;
        float r53442 = r53439 - r53441;
        float r53443 = r53438 / r53442;
        float r53444 = y;
        float r53445 = r53439 / r53435;
        float r53446 = r53445 - r53440;
        float r53447 = r53444 / r53446;
        float r53448 = r53443 - r53447;
        float r53449 = 2.6543386739054206e-90;
        bool r53450 = r53435 <= r53449;
        float r53451 = r53444 * r53435;
        float r53452 = r53438 - r53451;
        float r53453 = 1;
        float r53454 = r53453 / r53442;
        float r53455 = r53452 * r53454;
        float r53456 = r53450 ? r53455 : r53448;
        float r53457 = r53437 ? r53448 : r53456;
        return r53457;
}

double f_od(double x, double y, double z, double t, double a) {
        double r53458 = z;
        double r53459 = -1.682586378158885e-40;
        bool r53460 = r53458 <= r53459;
        double r53461 = x;
        double r53462 = t;
        double r53463 = a;
        double r53464 = r53463 * r53458;
        double r53465 = r53462 - r53464;
        double r53466 = r53461 / r53465;
        double r53467 = y;
        double r53468 = r53462 / r53458;
        double r53469 = r53468 - r53463;
        double r53470 = r53467 / r53469;
        double r53471 = r53466 - r53470;
        double r53472 = 2.6543386739054206e-90;
        bool r53473 = r53458 <= r53472;
        double r53474 = r53467 * r53458;
        double r53475 = r53461 - r53474;
        double r53476 = 1;
        double r53477 = r53476 / r53465;
        double r53478 = r53475 * r53477;
        double r53479 = r53473 ? r53478 : r53471;
        double r53480 = r53460 ? r53471 : r53479;
        return r53480;
}

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 r53481, r53482, r53483, r53484, r53485, r53486, r53487, r53488, r53489, r53490;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53481);
        mpfr_init(r53482);
        mpfr_init(r53483);
        mpfr_init(r53484);
        mpfr_init(r53485);
        mpfr_init(r53486);
        mpfr_init(r53487);
        mpfr_init(r53488);
        mpfr_init(r53489);
        mpfr_init(r53490);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53481, x, MPFR_RNDN);
        mpfr_set_d(r53482, y, MPFR_RNDN);
        mpfr_set_d(r53483, z, MPFR_RNDN);
        mpfr_mul(r53484, r53482, r53483, MPFR_RNDN);
        mpfr_sub(r53485, r53481, r53484, MPFR_RNDN);
        mpfr_set_d(r53486, t, MPFR_RNDN);
        mpfr_set_d(r53487, a, MPFR_RNDN);
        mpfr_mul(r53488, r53487, r53483, MPFR_RNDN);
        mpfr_sub(r53489, r53486, r53488, MPFR_RNDN);
        mpfr_div(r53490, r53485, r53489, MPFR_RNDN);
        return mpfr_get_d(r53490, MPFR_RNDN);
}

static mpfr_t r53491, r53492, r53493, r53494, r53495, r53496, r53497, r53498, r53499, r53500, r53501, r53502, r53503, r53504, r53505, r53506, r53507, r53508, r53509, r53510, r53511, r53512, r53513;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53491);
        mpfr_init_set_str(r53492, "-1.682586378158885e-40", 10, MPFR_RNDN);
        mpfr_init(r53493);
        mpfr_init(r53494);
        mpfr_init(r53495);
        mpfr_init(r53496);
        mpfr_init(r53497);
        mpfr_init(r53498);
        mpfr_init(r53499);
        mpfr_init(r53500);
        mpfr_init(r53501);
        mpfr_init(r53502);
        mpfr_init(r53503);
        mpfr_init(r53504);
        mpfr_init_set_str(r53505, "2.6543386739054206e-90", 10, MPFR_RNDN);
        mpfr_init(r53506);
        mpfr_init(r53507);
        mpfr_init(r53508);
        mpfr_init_set_str(r53509, "1", 10, MPFR_RNDN);
        mpfr_init(r53510);
        mpfr_init(r53511);
        mpfr_init(r53512);
        mpfr_init(r53513);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53491, z, MPFR_RNDN);
        ;
        mpfr_set_si(r53493, mpfr_cmp(r53491, r53492) <= 0, MPFR_RNDN);
        mpfr_set_d(r53494, x, MPFR_RNDN);
        mpfr_set_d(r53495, t, MPFR_RNDN);
        mpfr_set_d(r53496, a, MPFR_RNDN);
        mpfr_mul(r53497, r53496, r53491, MPFR_RNDN);
        mpfr_sub(r53498, r53495, r53497, MPFR_RNDN);
        mpfr_div(r53499, r53494, r53498, MPFR_RNDN);
        mpfr_set_d(r53500, y, MPFR_RNDN);
        mpfr_div(r53501, r53495, r53491, MPFR_RNDN);
        mpfr_sub(r53502, r53501, r53496, MPFR_RNDN);
        mpfr_div(r53503, r53500, r53502, MPFR_RNDN);
        mpfr_sub(r53504, r53499, r53503, MPFR_RNDN);
        ;
        mpfr_set_si(r53506, mpfr_cmp(r53491, r53505) <= 0, MPFR_RNDN);
        mpfr_mul(r53507, r53500, r53491, MPFR_RNDN);
        mpfr_sub(r53508, r53494, r53507, MPFR_RNDN);
        ;
        mpfr_div(r53510, r53509, r53498, MPFR_RNDN);
        mpfr_mul(r53511, r53508, r53510, MPFR_RNDN);
        if (mpfr_get_si(r53506, MPFR_RNDN)) { mpfr_set(r53512, r53511, MPFR_RNDN); } else { mpfr_set(r53512, r53504, MPFR_RNDN); };
        if (mpfr_get_si(r53493, MPFR_RNDN)) { mpfr_set(r53513, r53504, MPFR_RNDN); } else { mpfr_set(r53513, r53512, MPFR_RNDN); };
        return mpfr_get_d(r53513, MPFR_RNDN);
}

static mpfr_t r53514, r53515, r53516, r53517, r53518, r53519, r53520, r53521, r53522, r53523, r53524, r53525, r53526, r53527, r53528, r53529, r53530, r53531, r53532, r53533, r53534, r53535, r53536;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53514);
        mpfr_init_set_str(r53515, "-1.682586378158885e-40", 10, MPFR_RNDN);
        mpfr_init(r53516);
        mpfr_init(r53517);
        mpfr_init(r53518);
        mpfr_init(r53519);
        mpfr_init(r53520);
        mpfr_init(r53521);
        mpfr_init(r53522);
        mpfr_init(r53523);
        mpfr_init(r53524);
        mpfr_init(r53525);
        mpfr_init(r53526);
        mpfr_init(r53527);
        mpfr_init_set_str(r53528, "2.6543386739054206e-90", 10, MPFR_RNDN);
        mpfr_init(r53529);
        mpfr_init(r53530);
        mpfr_init(r53531);
        mpfr_init_set_str(r53532, "1", 10, MPFR_RNDN);
        mpfr_init(r53533);
        mpfr_init(r53534);
        mpfr_init(r53535);
        mpfr_init(r53536);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53514, z, MPFR_RNDN);
        ;
        mpfr_set_si(r53516, mpfr_cmp(r53514, r53515) <= 0, MPFR_RNDN);
        mpfr_set_d(r53517, x, MPFR_RNDN);
        mpfr_set_d(r53518, t, MPFR_RNDN);
        mpfr_set_d(r53519, a, MPFR_RNDN);
        mpfr_mul(r53520, r53519, r53514, MPFR_RNDN);
        mpfr_sub(r53521, r53518, r53520, MPFR_RNDN);
        mpfr_div(r53522, r53517, r53521, MPFR_RNDN);
        mpfr_set_d(r53523, y, MPFR_RNDN);
        mpfr_div(r53524, r53518, r53514, MPFR_RNDN);
        mpfr_sub(r53525, r53524, r53519, MPFR_RNDN);
        mpfr_div(r53526, r53523, r53525, MPFR_RNDN);
        mpfr_sub(r53527, r53522, r53526, MPFR_RNDN);
        ;
        mpfr_set_si(r53529, mpfr_cmp(r53514, r53528) <= 0, MPFR_RNDN);
        mpfr_mul(r53530, r53523, r53514, MPFR_RNDN);
        mpfr_sub(r53531, r53517, r53530, MPFR_RNDN);
        ;
        mpfr_div(r53533, r53532, r53521, MPFR_RNDN);
        mpfr_mul(r53534, r53531, r53533, MPFR_RNDN);
        if (mpfr_get_si(r53529, MPFR_RNDN)) { mpfr_set(r53535, r53534, MPFR_RNDN); } else { mpfr_set(r53535, r53527, MPFR_RNDN); };
        if (mpfr_get_si(r53516, MPFR_RNDN)) { mpfr_set(r53536, r53527, MPFR_RNDN); } else { mpfr_set(r53536, r53535, MPFR_RNDN); };
        return mpfr_get_d(r53536, MPFR_RNDN);
}

