#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 r53221 = x;
        float r53222 = y;
        float r53223 = z;
        float r53224 = r53222 * r53223;
        float r53225 = r53221 - r53224;
        float r53226 = t;
        float r53227 = a;
        float r53228 = r53227 * r53223;
        float r53229 = r53226 - r53228;
        float r53230 = r53225 / r53229;
        return r53230;
}

double f_id(double x, double y, double z, double t, double a) {
        double r53231 = x;
        double r53232 = y;
        double r53233 = z;
        double r53234 = r53232 * r53233;
        double r53235 = r53231 - r53234;
        double r53236 = t;
        double r53237 = a;
        double r53238 = r53237 * r53233;
        double r53239 = r53236 - r53238;
        double r53240 = r53235 / r53239;
        return r53240;
}


double f_of(float x, float y, float z, float t, float a) {
        float r53241 = z;
        float r53242 = -1.0847643037085715e-14;
        bool r53243 = r53241 <= r53242;
        float r53244 = x;
        float r53245 = t;
        float r53246 = a;
        float r53247 = r53246 * r53241;
        float r53248 = r53245 - r53247;
        float r53249 = r53244 / r53248;
        float r53250 = y;
        float r53251 = r53245 / r53241;
        float r53252 = r53251 - r53246;
        float r53253 = r53250 / r53252;
        float r53254 = r53249 - r53253;
        float r53255 = 6.754883700990985e-90;
        bool r53256 = r53241 <= r53255;
        float r53257 = r53250 * r53241;
        float r53258 = r53244 - r53257;
        float r53259 = r53258 / r53248;
        float r53260 = r53256 ? r53259 : r53254;
        float r53261 = r53243 ? r53254 : r53260;
        return r53261;
}

double f_od(double x, double y, double z, double t, double a) {
        double r53262 = z;
        double r53263 = -1.0847643037085715e-14;
        bool r53264 = r53262 <= r53263;
        double r53265 = x;
        double r53266 = t;
        double r53267 = a;
        double r53268 = r53267 * r53262;
        double r53269 = r53266 - r53268;
        double r53270 = r53265 / r53269;
        double r53271 = y;
        double r53272 = r53266 / r53262;
        double r53273 = r53272 - r53267;
        double r53274 = r53271 / r53273;
        double r53275 = r53270 - r53274;
        double r53276 = 6.754883700990985e-90;
        bool r53277 = r53262 <= r53276;
        double r53278 = r53271 * r53262;
        double r53279 = r53265 - r53278;
        double r53280 = r53279 / r53269;
        double r53281 = r53277 ? r53280 : r53275;
        double r53282 = r53264 ? r53275 : r53281;
        return r53282;
}

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 r53283, r53284, r53285, r53286, r53287, r53288, r53289, r53290, r53291, r53292;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53283);
        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);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53283, x, MPFR_RNDN);
        mpfr_set_d(r53284, y, MPFR_RNDN);
        mpfr_set_d(r53285, z, MPFR_RNDN);
        mpfr_mul(r53286, r53284, r53285, MPFR_RNDN);
        mpfr_sub(r53287, r53283, r53286, MPFR_RNDN);
        mpfr_set_d(r53288, t, MPFR_RNDN);
        mpfr_set_d(r53289, a, MPFR_RNDN);
        mpfr_mul(r53290, r53289, r53285, MPFR_RNDN);
        mpfr_sub(r53291, r53288, r53290, MPFR_RNDN);
        mpfr_div(r53292, r53287, r53291, MPFR_RNDN);
        return mpfr_get_d(r53292, MPFR_RNDN);
}

static mpfr_t r53293, r53294, r53295, r53296, r53297, r53298, r53299, r53300, r53301, r53302, r53303, r53304, r53305, r53306, r53307, r53308, r53309, r53310, r53311, r53312, r53313;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53293);
        mpfr_init_set_str(r53294, "-1.0847643037085715e-14", 10, MPFR_RNDN);
        mpfr_init(r53295);
        mpfr_init(r53296);
        mpfr_init(r53297);
        mpfr_init(r53298);
        mpfr_init(r53299);
        mpfr_init(r53300);
        mpfr_init(r53301);
        mpfr_init(r53302);
        mpfr_init(r53303);
        mpfr_init(r53304);
        mpfr_init(r53305);
        mpfr_init(r53306);
        mpfr_init_set_str(r53307, "6.754883700990985e-90", 10, MPFR_RNDN);
        mpfr_init(r53308);
        mpfr_init(r53309);
        mpfr_init(r53310);
        mpfr_init(r53311);
        mpfr_init(r53312);
        mpfr_init(r53313);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53293, z, MPFR_RNDN);
        ;
        mpfr_set_si(r53295, mpfr_cmp(r53293, r53294) <= 0, MPFR_RNDN);
        mpfr_set_d(r53296, x, MPFR_RNDN);
        mpfr_set_d(r53297, t, MPFR_RNDN);
        mpfr_set_d(r53298, a, MPFR_RNDN);
        mpfr_mul(r53299, r53298, r53293, MPFR_RNDN);
        mpfr_sub(r53300, r53297, r53299, MPFR_RNDN);
        mpfr_div(r53301, r53296, r53300, MPFR_RNDN);
        mpfr_set_d(r53302, y, MPFR_RNDN);
        mpfr_div(r53303, r53297, r53293, MPFR_RNDN);
        mpfr_sub(r53304, r53303, r53298, MPFR_RNDN);
        mpfr_div(r53305, r53302, r53304, MPFR_RNDN);
        mpfr_sub(r53306, r53301, r53305, MPFR_RNDN);
        ;
        mpfr_set_si(r53308, mpfr_cmp(r53293, r53307) <= 0, MPFR_RNDN);
        mpfr_mul(r53309, r53302, r53293, MPFR_RNDN);
        mpfr_sub(r53310, r53296, r53309, MPFR_RNDN);
        mpfr_div(r53311, r53310, r53300, MPFR_RNDN);
        if (mpfr_get_si(r53308, MPFR_RNDN)) { mpfr_set(r53312, r53311, MPFR_RNDN); } else { mpfr_set(r53312, r53306, MPFR_RNDN); };
        if (mpfr_get_si(r53295, MPFR_RNDN)) { mpfr_set(r53313, r53306, MPFR_RNDN); } else { mpfr_set(r53313, r53312, MPFR_RNDN); };
        return mpfr_get_d(r53313, MPFR_RNDN);
}

static mpfr_t r53314, r53315, r53316, r53317, r53318, r53319, r53320, r53321, r53322, r53323, r53324, r53325, r53326, r53327, r53328, r53329, r53330, r53331, r53332, r53333, r53334;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53314);
        mpfr_init_set_str(r53315, "-1.0847643037085715e-14", 10, MPFR_RNDN);
        mpfr_init(r53316);
        mpfr_init(r53317);
        mpfr_init(r53318);
        mpfr_init(r53319);
        mpfr_init(r53320);
        mpfr_init(r53321);
        mpfr_init(r53322);
        mpfr_init(r53323);
        mpfr_init(r53324);
        mpfr_init(r53325);
        mpfr_init(r53326);
        mpfr_init(r53327);
        mpfr_init_set_str(r53328, "6.754883700990985e-90", 10, MPFR_RNDN);
        mpfr_init(r53329);
        mpfr_init(r53330);
        mpfr_init(r53331);
        mpfr_init(r53332);
        mpfr_init(r53333);
        mpfr_init(r53334);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r53314, z, MPFR_RNDN);
        ;
        mpfr_set_si(r53316, mpfr_cmp(r53314, r53315) <= 0, MPFR_RNDN);
        mpfr_set_d(r53317, x, MPFR_RNDN);
        mpfr_set_d(r53318, t, MPFR_RNDN);
        mpfr_set_d(r53319, a, MPFR_RNDN);
        mpfr_mul(r53320, r53319, r53314, MPFR_RNDN);
        mpfr_sub(r53321, r53318, r53320, MPFR_RNDN);
        mpfr_div(r53322, r53317, r53321, MPFR_RNDN);
        mpfr_set_d(r53323, y, MPFR_RNDN);
        mpfr_div(r53324, r53318, r53314, MPFR_RNDN);
        mpfr_sub(r53325, r53324, r53319, MPFR_RNDN);
        mpfr_div(r53326, r53323, r53325, MPFR_RNDN);
        mpfr_sub(r53327, r53322, r53326, MPFR_RNDN);
        ;
        mpfr_set_si(r53329, mpfr_cmp(r53314, r53328) <= 0, MPFR_RNDN);
        mpfr_mul(r53330, r53323, r53314, MPFR_RNDN);
        mpfr_sub(r53331, r53317, r53330, MPFR_RNDN);
        mpfr_div(r53332, r53331, r53321, MPFR_RNDN);
        if (mpfr_get_si(r53329, MPFR_RNDN)) { mpfr_set(r53333, r53332, MPFR_RNDN); } else { mpfr_set(r53333, r53327, MPFR_RNDN); };
        if (mpfr_get_si(r53316, MPFR_RNDN)) { mpfr_set(r53334, r53327, MPFR_RNDN); } else { mpfr_set(r53334, r53333, MPFR_RNDN); };
        return mpfr_get_d(r53334, MPFR_RNDN);
}

