#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 r53094 = x;
        float r53095 = y;
        float r53096 = z;
        float r53097 = r53095 * r53096;
        float r53098 = r53094 - r53097;
        float r53099 = t;
        float r53100 = a;
        float r53101 = r53100 * r53096;
        float r53102 = r53099 - r53101;
        float r53103 = r53098 / r53102;
        return r53103;
}

double f_id(double x, double y, double z, double t, double a) {
        double r53104 = x;
        double r53105 = y;
        double r53106 = z;
        double r53107 = r53105 * r53106;
        double r53108 = r53104 - r53107;
        double r53109 = t;
        double r53110 = a;
        double r53111 = r53110 * r53106;
        double r53112 = r53109 - r53111;
        double r53113 = r53108 / r53112;
        return r53113;
}


double f_of(float x, float y, float z, float t, float a) {
        float r53114 = z;
        float r53115 = -4.8159388020988386e-49;
        bool r53116 = r53114 <= r53115;
        float r53117 = x;
        float r53118 = t;
        float r53119 = a;
        float r53120 = r53119 * r53114;
        float r53121 = r53118 - r53120;
        float r53122 = r53117 / r53121;
        float r53123 = y;
        float r53124 = r53118 / r53114;
        float r53125 = r53124 - r53119;
        float r53126 = r53123 / r53125;
        float r53127 = r53122 - r53126;
        float r53128 = 7.719717825011118e-90;
        bool r53129 = r53114 <= r53128;
        float r53130 = r53123 * r53114;
        float r53131 = r53117 - r53130;
        float r53132 = 1;
        float r53133 = r53132 / r53121;
        float r53134 = r53131 * r53133;
        float r53135 = r53129 ? r53134 : r53127;
        float r53136 = r53116 ? r53127 : r53135;
        return r53136;
}

double f_od(double x, double y, double z, double t, double a) {
        double r53137 = z;
        double r53138 = -4.8159388020988386e-49;
        bool r53139 = r53137 <= r53138;
        double r53140 = x;
        double r53141 = t;
        double r53142 = a;
        double r53143 = r53142 * r53137;
        double r53144 = r53141 - r53143;
        double r53145 = r53140 / r53144;
        double r53146 = y;
        double r53147 = r53141 / r53137;
        double r53148 = r53147 - r53142;
        double r53149 = r53146 / r53148;
        double r53150 = r53145 - r53149;
        double r53151 = 7.719717825011118e-90;
        bool r53152 = r53137 <= r53151;
        double r53153 = r53146 * r53137;
        double r53154 = r53140 - r53153;
        double r53155 = 1;
        double r53156 = r53155 / r53144;
        double r53157 = r53154 * r53156;
        double r53158 = r53152 ? r53157 : r53150;
        double r53159 = r53139 ? r53150 : r53158;
        return r53159;
}

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 r53160, r53161, r53162, r53163, r53164, r53165, r53166, r53167, r53168, r53169;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53160);
        mpfr_init(r53161);
        mpfr_init(r53162);
        mpfr_init(r53163);
        mpfr_init(r53164);
        mpfr_init(r53165);
        mpfr_init(r53166);
        mpfr_init(r53167);
        mpfr_init(r53168);
        mpfr_init(r53169);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53160, x, MPFR_RNDN);
        mpfr_set_d(r53161, y, MPFR_RNDN);
        mpfr_set_d(r53162, z, MPFR_RNDN);
        mpfr_mul(r53163, r53161, r53162, MPFR_RNDN);
        mpfr_sub(r53164, r53160, r53163, MPFR_RNDN);
        mpfr_set_d(r53165, t, MPFR_RNDN);
        mpfr_set_d(r53166, a, MPFR_RNDN);
        mpfr_mul(r53167, r53166, r53162, MPFR_RNDN);
        mpfr_sub(r53168, r53165, r53167, MPFR_RNDN);
        mpfr_div(r53169, r53164, r53168, MPFR_RNDN);
        return mpfr_get_d(r53169, MPFR_RNDN);
}

static mpfr_t r53170, r53171, r53172, r53173, r53174, r53175, r53176, r53177, r53178, r53179, r53180, r53181, r53182, r53183, r53184, r53185, r53186, r53187, r53188, r53189, r53190, r53191, r53192;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53170);
        mpfr_init_set_str(r53171, "-4.8159388020988386e-49", 10, MPFR_RNDN);
        mpfr_init(r53172);
        mpfr_init(r53173);
        mpfr_init(r53174);
        mpfr_init(r53175);
        mpfr_init(r53176);
        mpfr_init(r53177);
        mpfr_init(r53178);
        mpfr_init(r53179);
        mpfr_init(r53180);
        mpfr_init(r53181);
        mpfr_init(r53182);
        mpfr_init(r53183);
        mpfr_init_set_str(r53184, "7.719717825011118e-90", 10, MPFR_RNDN);
        mpfr_init(r53185);
        mpfr_init(r53186);
        mpfr_init(r53187);
        mpfr_init_set_str(r53188, "1", 10, MPFR_RNDN);
        mpfr_init(r53189);
        mpfr_init(r53190);
        mpfr_init(r53191);
        mpfr_init(r53192);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53170, z, MPFR_RNDN);
        ;
        mpfr_set_si(r53172, mpfr_cmp(r53170, r53171) <= 0, MPFR_RNDN);
        mpfr_set_d(r53173, x, MPFR_RNDN);
        mpfr_set_d(r53174, t, MPFR_RNDN);
        mpfr_set_d(r53175, a, MPFR_RNDN);
        mpfr_mul(r53176, r53175, r53170, MPFR_RNDN);
        mpfr_sub(r53177, r53174, r53176, MPFR_RNDN);
        mpfr_div(r53178, r53173, r53177, MPFR_RNDN);
        mpfr_set_d(r53179, y, MPFR_RNDN);
        mpfr_div(r53180, r53174, r53170, MPFR_RNDN);
        mpfr_sub(r53181, r53180, r53175, MPFR_RNDN);
        mpfr_div(r53182, r53179, r53181, MPFR_RNDN);
        mpfr_sub(r53183, r53178, r53182, MPFR_RNDN);
        ;
        mpfr_set_si(r53185, mpfr_cmp(r53170, r53184) <= 0, MPFR_RNDN);
        mpfr_mul(r53186, r53179, r53170, MPFR_RNDN);
        mpfr_sub(r53187, r53173, r53186, MPFR_RNDN);
        ;
        mpfr_div(r53189, r53188, r53177, MPFR_RNDN);
        mpfr_mul(r53190, r53187, r53189, MPFR_RNDN);
        if (mpfr_get_si(r53185, MPFR_RNDN)) { mpfr_set(r53191, r53190, MPFR_RNDN); } else { mpfr_set(r53191, r53183, MPFR_RNDN); };
        if (mpfr_get_si(r53172, MPFR_RNDN)) { mpfr_set(r53192, r53183, MPFR_RNDN); } else { mpfr_set(r53192, r53191, MPFR_RNDN); };
        return mpfr_get_d(r53192, MPFR_RNDN);
}

static mpfr_t r53193, r53194, r53195, r53196, r53197, r53198, r53199, r53200, r53201, r53202, r53203, r53204, r53205, r53206, r53207, r53208, r53209, r53210, r53211, r53212, r53213, r53214, r53215;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53193);
        mpfr_init_set_str(r53194, "-4.8159388020988386e-49", 10, MPFR_RNDN);
        mpfr_init(r53195);
        mpfr_init(r53196);
        mpfr_init(r53197);
        mpfr_init(r53198);
        mpfr_init(r53199);
        mpfr_init(r53200);
        mpfr_init(r53201);
        mpfr_init(r53202);
        mpfr_init(r53203);
        mpfr_init(r53204);
        mpfr_init(r53205);
        mpfr_init(r53206);
        mpfr_init_set_str(r53207, "7.719717825011118e-90", 10, MPFR_RNDN);
        mpfr_init(r53208);
        mpfr_init(r53209);
        mpfr_init(r53210);
        mpfr_init_set_str(r53211, "1", 10, MPFR_RNDN);
        mpfr_init(r53212);
        mpfr_init(r53213);
        mpfr_init(r53214);
        mpfr_init(r53215);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53193, z, MPFR_RNDN);
        ;
        mpfr_set_si(r53195, mpfr_cmp(r53193, r53194) <= 0, MPFR_RNDN);
        mpfr_set_d(r53196, x, MPFR_RNDN);
        mpfr_set_d(r53197, t, MPFR_RNDN);
        mpfr_set_d(r53198, a, MPFR_RNDN);
        mpfr_mul(r53199, r53198, r53193, MPFR_RNDN);
        mpfr_sub(r53200, r53197, r53199, MPFR_RNDN);
        mpfr_div(r53201, r53196, r53200, MPFR_RNDN);
        mpfr_set_d(r53202, y, MPFR_RNDN);
        mpfr_div(r53203, r53197, r53193, MPFR_RNDN);
        mpfr_sub(r53204, r53203, r53198, MPFR_RNDN);
        mpfr_div(r53205, r53202, r53204, MPFR_RNDN);
        mpfr_sub(r53206, r53201, r53205, MPFR_RNDN);
        ;
        mpfr_set_si(r53208, mpfr_cmp(r53193, r53207) <= 0, MPFR_RNDN);
        mpfr_mul(r53209, r53202, r53193, MPFR_RNDN);
        mpfr_sub(r53210, r53196, r53209, MPFR_RNDN);
        ;
        mpfr_div(r53212, r53211, r53200, MPFR_RNDN);
        mpfr_mul(r53213, r53210, r53212, MPFR_RNDN);
        if (mpfr_get_si(r53208, MPFR_RNDN)) { mpfr_set(r53214, r53213, MPFR_RNDN); } else { mpfr_set(r53214, r53206, MPFR_RNDN); };
        if (mpfr_get_si(r53195, MPFR_RNDN)) { mpfr_set(r53215, r53206, MPFR_RNDN); } else { mpfr_set(r53215, r53214, MPFR_RNDN); };
        return mpfr_get_d(r53215, MPFR_RNDN);
}

