#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 r53183 = x;
        float r53184 = y;
        float r53185 = z;
        float r53186 = r53184 * r53185;
        float r53187 = r53183 - r53186;
        float r53188 = t;
        float r53189 = a;
        float r53190 = r53189 * r53185;
        float r53191 = r53188 - r53190;
        float r53192 = r53187 / r53191;
        return r53192;
}

double f_id(double x, double y, double z, double t, double a) {
        double r53193 = x;
        double r53194 = y;
        double r53195 = z;
        double r53196 = r53194 * r53195;
        double r53197 = r53193 - r53196;
        double r53198 = t;
        double r53199 = a;
        double r53200 = r53199 * r53195;
        double r53201 = r53198 - r53200;
        double r53202 = r53197 / r53201;
        return r53202;
}


double f_of(float x, float y, float z, float t, float a) {
        float r53203 = z;
        float r53204 = -4.8159388020988386e-49;
        bool r53205 = r53203 <= r53204;
        float r53206 = x;
        float r53207 = t;
        float r53208 = a;
        float r53209 = r53208 * r53203;
        float r53210 = r53207 - r53209;
        float r53211 = r53206 / r53210;
        float r53212 = y;
        float r53213 = r53207 / r53203;
        float r53214 = r53213 - r53208;
        float r53215 = r53212 / r53214;
        float r53216 = r53211 - r53215;
        float r53217 = 7.719717825011118e-90;
        bool r53218 = r53203 <= r53217;
        float r53219 = r53212 * r53203;
        float r53220 = r53206 - r53219;
        float r53221 = 1;
        float r53222 = r53221 / r53210;
        float r53223 = r53220 * r53222;
        float r53224 = r53218 ? r53223 : r53216;
        float r53225 = r53205 ? r53216 : r53224;
        return r53225;
}

double f_od(double x, double y, double z, double t, double a) {
        double r53226 = z;
        double r53227 = -4.8159388020988386e-49;
        bool r53228 = r53226 <= r53227;
        double r53229 = x;
        double r53230 = t;
        double r53231 = a;
        double r53232 = r53231 * r53226;
        double r53233 = r53230 - r53232;
        double r53234 = r53229 / r53233;
        double r53235 = y;
        double r53236 = r53230 / r53226;
        double r53237 = r53236 - r53231;
        double r53238 = r53235 / r53237;
        double r53239 = r53234 - r53238;
        double r53240 = 7.719717825011118e-90;
        bool r53241 = r53226 <= r53240;
        double r53242 = r53235 * r53226;
        double r53243 = r53229 - r53242;
        double r53244 = 1;
        double r53245 = r53244 / r53233;
        double r53246 = r53243 * r53245;
        double r53247 = r53241 ? r53246 : r53239;
        double r53248 = r53228 ? r53239 : r53247;
        return r53248;
}

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 r53249, r53250, r53251, r53252, r53253, r53254, r53255, r53256, r53257, r53258;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53249);
        mpfr_init(r53250);
        mpfr_init(r53251);
        mpfr_init(r53252);
        mpfr_init(r53253);
        mpfr_init(r53254);
        mpfr_init(r53255);
        mpfr_init(r53256);
        mpfr_init(r53257);
        mpfr_init(r53258);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53249, x, MPFR_RNDN);
        mpfr_set_d(r53250, y, MPFR_RNDN);
        mpfr_set_d(r53251, z, MPFR_RNDN);
        mpfr_mul(r53252, r53250, r53251, MPFR_RNDN);
        mpfr_sub(r53253, r53249, r53252, MPFR_RNDN);
        mpfr_set_d(r53254, t, MPFR_RNDN);
        mpfr_set_d(r53255, a, MPFR_RNDN);
        mpfr_mul(r53256, r53255, r53251, MPFR_RNDN);
        mpfr_sub(r53257, r53254, r53256, MPFR_RNDN);
        mpfr_div(r53258, r53253, r53257, MPFR_RNDN);
        return mpfr_get_d(r53258, MPFR_RNDN);
}

static mpfr_t r53259, r53260, r53261, r53262, r53263, r53264, r53265, r53266, r53267, r53268, r53269, r53270, r53271, r53272, r53273, r53274, r53275, r53276, r53277, r53278, r53279, r53280, r53281;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53259);
        mpfr_init_set_str(r53260, "-4.8159388020988386e-49", 10, MPFR_RNDN);
        mpfr_init(r53261);
        mpfr_init(r53262);
        mpfr_init(r53263);
        mpfr_init(r53264);
        mpfr_init(r53265);
        mpfr_init(r53266);
        mpfr_init(r53267);
        mpfr_init(r53268);
        mpfr_init(r53269);
        mpfr_init(r53270);
        mpfr_init(r53271);
        mpfr_init(r53272);
        mpfr_init_set_str(r53273, "7.719717825011118e-90", 10, MPFR_RNDN);
        mpfr_init(r53274);
        mpfr_init(r53275);
        mpfr_init(r53276);
        mpfr_init_set_str(r53277, "1", 10, MPFR_RNDN);
        mpfr_init(r53278);
        mpfr_init(r53279);
        mpfr_init(r53280);
        mpfr_init(r53281);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53259, z, MPFR_RNDN);
        ;
        mpfr_set_si(r53261, mpfr_cmp(r53259, r53260) <= 0, MPFR_RNDN);
        mpfr_set_d(r53262, x, MPFR_RNDN);
        mpfr_set_d(r53263, t, MPFR_RNDN);
        mpfr_set_d(r53264, a, MPFR_RNDN);
        mpfr_mul(r53265, r53264, r53259, MPFR_RNDN);
        mpfr_sub(r53266, r53263, r53265, MPFR_RNDN);
        mpfr_div(r53267, r53262, r53266, MPFR_RNDN);
        mpfr_set_d(r53268, y, MPFR_RNDN);
        mpfr_div(r53269, r53263, r53259, MPFR_RNDN);
        mpfr_sub(r53270, r53269, r53264, MPFR_RNDN);
        mpfr_div(r53271, r53268, r53270, MPFR_RNDN);
        mpfr_sub(r53272, r53267, r53271, MPFR_RNDN);
        ;
        mpfr_set_si(r53274, mpfr_cmp(r53259, r53273) <= 0, MPFR_RNDN);
        mpfr_mul(r53275, r53268, r53259, MPFR_RNDN);
        mpfr_sub(r53276, r53262, r53275, MPFR_RNDN);
        ;
        mpfr_div(r53278, r53277, r53266, MPFR_RNDN);
        mpfr_mul(r53279, r53276, r53278, MPFR_RNDN);
        if (mpfr_get_si(r53274, MPFR_RNDN)) { mpfr_set(r53280, r53279, MPFR_RNDN); } else { mpfr_set(r53280, r53272, MPFR_RNDN); };
        if (mpfr_get_si(r53261, MPFR_RNDN)) { mpfr_set(r53281, r53272, MPFR_RNDN); } else { mpfr_set(r53281, r53280, MPFR_RNDN); };
        return mpfr_get_d(r53281, MPFR_RNDN);
}

static mpfr_t r53282, r53283, r53284, r53285, r53286, r53287, r53288, r53289, r53290, r53291, r53292, r53293, r53294, r53295, r53296, r53297, r53298, r53299, r53300, r53301, r53302, r53303, r53304;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53282);
        mpfr_init_set_str(r53283, "-4.8159388020988386e-49", 10, MPFR_RNDN);
        mpfr_init(r53284);
        mpfr_init(r53285);
        mpfr_init(r53286);
        mpfr_init(r53287);
        mpfr_init(r53288);
        mpfr_init(r53289);
        mpfr_init(r53290);
        mpfr_init(r53291);
        mpfr_init(r53292);
        mpfr_init(r53293);
        mpfr_init(r53294);
        mpfr_init(r53295);
        mpfr_init_set_str(r53296, "7.719717825011118e-90", 10, MPFR_RNDN);
        mpfr_init(r53297);
        mpfr_init(r53298);
        mpfr_init(r53299);
        mpfr_init_set_str(r53300, "1", 10, MPFR_RNDN);
        mpfr_init(r53301);
        mpfr_init(r53302);
        mpfr_init(r53303);
        mpfr_init(r53304);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53282, z, MPFR_RNDN);
        ;
        mpfr_set_si(r53284, mpfr_cmp(r53282, r53283) <= 0, MPFR_RNDN);
        mpfr_set_d(r53285, x, MPFR_RNDN);
        mpfr_set_d(r53286, t, MPFR_RNDN);
        mpfr_set_d(r53287, a, MPFR_RNDN);
        mpfr_mul(r53288, r53287, r53282, MPFR_RNDN);
        mpfr_sub(r53289, r53286, r53288, MPFR_RNDN);
        mpfr_div(r53290, r53285, r53289, MPFR_RNDN);
        mpfr_set_d(r53291, y, MPFR_RNDN);
        mpfr_div(r53292, r53286, r53282, MPFR_RNDN);
        mpfr_sub(r53293, r53292, r53287, MPFR_RNDN);
        mpfr_div(r53294, r53291, r53293, MPFR_RNDN);
        mpfr_sub(r53295, r53290, r53294, MPFR_RNDN);
        ;
        mpfr_set_si(r53297, mpfr_cmp(r53282, r53296) <= 0, MPFR_RNDN);
        mpfr_mul(r53298, r53291, r53282, MPFR_RNDN);
        mpfr_sub(r53299, r53285, r53298, MPFR_RNDN);
        ;
        mpfr_div(r53301, r53300, r53289, MPFR_RNDN);
        mpfr_mul(r53302, r53299, r53301, MPFR_RNDN);
        if (mpfr_get_si(r53297, MPFR_RNDN)) { mpfr_set(r53303, r53302, MPFR_RNDN); } else { mpfr_set(r53303, r53295, MPFR_RNDN); };
        if (mpfr_get_si(r53284, MPFR_RNDN)) { mpfr_set(r53304, r53295, MPFR_RNDN); } else { mpfr_set(r53304, r53303, MPFR_RNDN); };
        return mpfr_get_d(r53304, MPFR_RNDN);
}

