#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 r52354 = x;
        float r52355 = y;
        float r52356 = z;
        float r52357 = r52355 * r52356;
        float r52358 = r52354 - r52357;
        float r52359 = t;
        float r52360 = a;
        float r52361 = r52360 * r52356;
        float r52362 = r52359 - r52361;
        float r52363 = r52358 / r52362;
        return r52363;
}

double f_id(double x, double y, double z, double t, double a) {
        double r52364 = x;
        double r52365 = y;
        double r52366 = z;
        double r52367 = r52365 * r52366;
        double r52368 = r52364 - r52367;
        double r52369 = t;
        double r52370 = a;
        double r52371 = r52370 * r52366;
        double r52372 = r52369 - r52371;
        double r52373 = r52368 / r52372;
        return r52373;
}


double f_of(float x, float y, float z, float t, float a) {
        float r52374 = z;
        float r52375 = -1.0847643037085715e-14;
        bool r52376 = r52374 <= r52375;
        float r52377 = x;
        float r52378 = t;
        float r52379 = a;
        float r52380 = r52379 * r52374;
        float r52381 = r52378 - r52380;
        float r52382 = r52377 / r52381;
        float r52383 = y;
        float r52384 = r52378 / r52374;
        float r52385 = r52384 - r52379;
        float r52386 = r52383 / r52385;
        float r52387 = r52382 - r52386;
        float r52388 = 6.754883700990985e-90;
        bool r52389 = r52374 <= r52388;
        float r52390 = r52383 * r52374;
        float r52391 = r52377 - r52390;
        float r52392 = r52391 / r52381;
        float r52393 = r52389 ? r52392 : r52387;
        float r52394 = r52376 ? r52387 : r52393;
        return r52394;
}

double f_od(double x, double y, double z, double t, double a) {
        double r52395 = z;
        double r52396 = -1.0847643037085715e-14;
        bool r52397 = r52395 <= r52396;
        double r52398 = x;
        double r52399 = t;
        double r52400 = a;
        double r52401 = r52400 * r52395;
        double r52402 = r52399 - r52401;
        double r52403 = r52398 / r52402;
        double r52404 = y;
        double r52405 = r52399 / r52395;
        double r52406 = r52405 - r52400;
        double r52407 = r52404 / r52406;
        double r52408 = r52403 - r52407;
        double r52409 = 6.754883700990985e-90;
        bool r52410 = r52395 <= r52409;
        double r52411 = r52404 * r52395;
        double r52412 = r52398 - r52411;
        double r52413 = r52412 / r52402;
        double r52414 = r52410 ? r52413 : r52408;
        double r52415 = r52397 ? r52408 : r52414;
        return r52415;
}

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 r52416, r52417, r52418, r52419, r52420, r52421, r52422, r52423, r52424, r52425;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52416);
        mpfr_init(r52417);
        mpfr_init(r52418);
        mpfr_init(r52419);
        mpfr_init(r52420);
        mpfr_init(r52421);
        mpfr_init(r52422);
        mpfr_init(r52423);
        mpfr_init(r52424);
        mpfr_init(r52425);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r52416, x, MPFR_RNDN);
        mpfr_set_d(r52417, y, MPFR_RNDN);
        mpfr_set_d(r52418, z, MPFR_RNDN);
        mpfr_mul(r52419, r52417, r52418, MPFR_RNDN);
        mpfr_sub(r52420, r52416, r52419, MPFR_RNDN);
        mpfr_set_d(r52421, t, MPFR_RNDN);
        mpfr_set_d(r52422, a, MPFR_RNDN);
        mpfr_mul(r52423, r52422, r52418, MPFR_RNDN);
        mpfr_sub(r52424, r52421, r52423, MPFR_RNDN);
        mpfr_div(r52425, r52420, r52424, MPFR_RNDN);
        return mpfr_get_d(r52425, MPFR_RNDN);
}

static mpfr_t r52426, r52427, r52428, r52429, r52430, r52431, r52432, r52433, r52434, r52435, r52436, r52437, r52438, r52439, r52440, r52441, r52442, r52443, r52444, r52445, r52446;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52426);
        mpfr_init_set_str(r52427, "-1.0847643037085715e-14", 10, MPFR_RNDN);
        mpfr_init(r52428);
        mpfr_init(r52429);
        mpfr_init(r52430);
        mpfr_init(r52431);
        mpfr_init(r52432);
        mpfr_init(r52433);
        mpfr_init(r52434);
        mpfr_init(r52435);
        mpfr_init(r52436);
        mpfr_init(r52437);
        mpfr_init(r52438);
        mpfr_init(r52439);
        mpfr_init_set_str(r52440, "6.754883700990985e-90", 10, MPFR_RNDN);
        mpfr_init(r52441);
        mpfr_init(r52442);
        mpfr_init(r52443);
        mpfr_init(r52444);
        mpfr_init(r52445);
        mpfr_init(r52446);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r52426, z, MPFR_RNDN);
        ;
        mpfr_set_si(r52428, mpfr_cmp(r52426, r52427) <= 0, MPFR_RNDN);
        mpfr_set_d(r52429, x, MPFR_RNDN);
        mpfr_set_d(r52430, t, MPFR_RNDN);
        mpfr_set_d(r52431, a, MPFR_RNDN);
        mpfr_mul(r52432, r52431, r52426, MPFR_RNDN);
        mpfr_sub(r52433, r52430, r52432, MPFR_RNDN);
        mpfr_div(r52434, r52429, r52433, MPFR_RNDN);
        mpfr_set_d(r52435, y, MPFR_RNDN);
        mpfr_div(r52436, r52430, r52426, MPFR_RNDN);
        mpfr_sub(r52437, r52436, r52431, MPFR_RNDN);
        mpfr_div(r52438, r52435, r52437, MPFR_RNDN);
        mpfr_sub(r52439, r52434, r52438, MPFR_RNDN);
        ;
        mpfr_set_si(r52441, mpfr_cmp(r52426, r52440) <= 0, MPFR_RNDN);
        mpfr_mul(r52442, r52435, r52426, MPFR_RNDN);
        mpfr_sub(r52443, r52429, r52442, MPFR_RNDN);
        mpfr_div(r52444, r52443, r52433, MPFR_RNDN);
        if (mpfr_get_si(r52441, MPFR_RNDN)) { mpfr_set(r52445, r52444, MPFR_RNDN); } else { mpfr_set(r52445, r52439, MPFR_RNDN); };
        if (mpfr_get_si(r52428, MPFR_RNDN)) { mpfr_set(r52446, r52439, MPFR_RNDN); } else { mpfr_set(r52446, r52445, MPFR_RNDN); };
        return mpfr_get_d(r52446, MPFR_RNDN);
}

static mpfr_t r52447, r52448, r52449, r52450, r52451, r52452, r52453, r52454, r52455, r52456, r52457, r52458, r52459, r52460, r52461, r52462, r52463, r52464, r52465, r52466, r52467;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52447);
        mpfr_init_set_str(r52448, "-1.0847643037085715e-14", 10, MPFR_RNDN);
        mpfr_init(r52449);
        mpfr_init(r52450);
        mpfr_init(r52451);
        mpfr_init(r52452);
        mpfr_init(r52453);
        mpfr_init(r52454);
        mpfr_init(r52455);
        mpfr_init(r52456);
        mpfr_init(r52457);
        mpfr_init(r52458);
        mpfr_init(r52459);
        mpfr_init(r52460);
        mpfr_init_set_str(r52461, "6.754883700990985e-90", 10, MPFR_RNDN);
        mpfr_init(r52462);
        mpfr_init(r52463);
        mpfr_init(r52464);
        mpfr_init(r52465);
        mpfr_init(r52466);
        mpfr_init(r52467);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r52447, z, MPFR_RNDN);
        ;
        mpfr_set_si(r52449, mpfr_cmp(r52447, r52448) <= 0, MPFR_RNDN);
        mpfr_set_d(r52450, x, MPFR_RNDN);
        mpfr_set_d(r52451, t, MPFR_RNDN);
        mpfr_set_d(r52452, a, MPFR_RNDN);
        mpfr_mul(r52453, r52452, r52447, MPFR_RNDN);
        mpfr_sub(r52454, r52451, r52453, MPFR_RNDN);
        mpfr_div(r52455, r52450, r52454, MPFR_RNDN);
        mpfr_set_d(r52456, y, MPFR_RNDN);
        mpfr_div(r52457, r52451, r52447, MPFR_RNDN);
        mpfr_sub(r52458, r52457, r52452, MPFR_RNDN);
        mpfr_div(r52459, r52456, r52458, MPFR_RNDN);
        mpfr_sub(r52460, r52455, r52459, MPFR_RNDN);
        ;
        mpfr_set_si(r52462, mpfr_cmp(r52447, r52461) <= 0, MPFR_RNDN);
        mpfr_mul(r52463, r52456, r52447, MPFR_RNDN);
        mpfr_sub(r52464, r52450, r52463, MPFR_RNDN);
        mpfr_div(r52465, r52464, r52454, MPFR_RNDN);
        if (mpfr_get_si(r52462, MPFR_RNDN)) { mpfr_set(r52466, r52465, MPFR_RNDN); } else { mpfr_set(r52466, r52460, MPFR_RNDN); };
        if (mpfr_get_si(r52449, MPFR_RNDN)) { mpfr_set(r52467, r52460, MPFR_RNDN); } else { mpfr_set(r52467, r52466, MPFR_RNDN); };
        return mpfr_get_d(r52467, MPFR_RNDN);
}

