#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B";

double f_if(float x, float y, float z, float t, float a, float b) {
        float r52468 = x;
        float r52469 = y;
        float r52470 = z;
        float r52471 = r52469 * r52470;
        float r52472 = t;
        float r52473 = r52471 / r52472;
        float r52474 = r52468 + r52473;
        float r52475 = a;
        float r52476 = 1.0;
        float r52477 = r52475 + r52476;
        float r52478 = b;
        float r52479 = r52469 * r52478;
        float r52480 = r52479 / r52472;
        float r52481 = r52477 + r52480;
        float r52482 = r52474 / r52481;
        return r52482;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r52483 = x;
        double r52484 = y;
        double r52485 = z;
        double r52486 = r52484 * r52485;
        double r52487 = t;
        double r52488 = r52486 / r52487;
        double r52489 = r52483 + r52488;
        double r52490 = a;
        double r52491 = 1.0;
        double r52492 = r52490 + r52491;
        double r52493 = b;
        double r52494 = r52484 * r52493;
        double r52495 = r52494 / r52487;
        double r52496 = r52492 + r52495;
        double r52497 = r52489 / r52496;
        return r52497;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r52498 = t;
        float r52499 = -3.97056359992514e+146;
        bool r52500 = r52498 <= r52499;
        float r52501 = 1;
        float r52502 = b;
        float r52503 = y;
        float r52504 = r52498 / r52503;
        float r52505 = r52502 / r52504;
        float r52506 = 1.0;
        float r52507 = a;
        float r52508 = r52506 + r52507;
        float r52509 = r52505 + r52508;
        float r52510 = x;
        float r52511 = z;
        float r52512 = r52511 / r52498;
        float r52513 = r52503 * r52512;
        float r52514 = r52510 + r52513;
        float r52515 = r52509 / r52514;
        float r52516 = r52501 / r52515;
        float r52517 = 2.719931656851136e+86;
        bool r52518 = r52498 <= r52517;
        float r52519 = r52503 * r52511;
        float r52520 = r52501 / r52498;
        float r52521 = r52519 * r52520;
        float r52522 = r52510 + r52521;
        float r52523 = r52507 + r52506;
        float r52524 = r52503 * r52502;
        float r52525 = r52524 / r52498;
        float r52526 = r52523 + r52525;
        float r52527 = r52522 / r52526;
        float r52528 = r52518 ? r52527 : r52516;
        float r52529 = r52500 ? r52516 : r52528;
        return r52529;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r52530 = t;
        double r52531 = -3.97056359992514e+146;
        bool r52532 = r52530 <= r52531;
        double r52533 = 1;
        double r52534 = b;
        double r52535 = y;
        double r52536 = r52530 / r52535;
        double r52537 = r52534 / r52536;
        double r52538 = 1.0;
        double r52539 = a;
        double r52540 = r52538 + r52539;
        double r52541 = r52537 + r52540;
        double r52542 = x;
        double r52543 = z;
        double r52544 = r52543 / r52530;
        double r52545 = r52535 * r52544;
        double r52546 = r52542 + r52545;
        double r52547 = r52541 / r52546;
        double r52548 = r52533 / r52547;
        double r52549 = 2.719931656851136e+86;
        bool r52550 = r52530 <= r52549;
        double r52551 = r52535 * r52543;
        double r52552 = r52533 / r52530;
        double r52553 = r52551 * r52552;
        double r52554 = r52542 + r52553;
        double r52555 = r52539 + r52538;
        double r52556 = r52535 * r52534;
        double r52557 = r52556 / r52530;
        double r52558 = r52555 + r52557;
        double r52559 = r52554 / r52558;
        double r52560 = r52550 ? r52559 : r52548;
        double r52561 = r52532 ? r52548 : r52560;
        return r52561;
}

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 r52562, r52563, r52564, r52565, r52566, r52567, r52568, r52569, r52570, r52571, r52572, r52573, r52574, r52575, r52576;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52562);
        mpfr_init(r52563);
        mpfr_init(r52564);
        mpfr_init(r52565);
        mpfr_init(r52566);
        mpfr_init(r52567);
        mpfr_init(r52568);
        mpfr_init(r52569);
        mpfr_init_set_str(r52570, "1.0", 10, MPFR_RNDN);
        mpfr_init(r52571);
        mpfr_init(r52572);
        mpfr_init(r52573);
        mpfr_init(r52574);
        mpfr_init(r52575);
        mpfr_init(r52576);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r52562, x, MPFR_RNDN);
        mpfr_set_d(r52563, y, MPFR_RNDN);
        mpfr_set_d(r52564, z, MPFR_RNDN);
        mpfr_mul(r52565, r52563, r52564, MPFR_RNDN);
        mpfr_set_d(r52566, t, MPFR_RNDN);
        mpfr_div(r52567, r52565, r52566, MPFR_RNDN);
        mpfr_add(r52568, r52562, r52567, MPFR_RNDN);
        mpfr_set_d(r52569, a, MPFR_RNDN);
        ;
        mpfr_add(r52571, r52569, r52570, MPFR_RNDN);
        mpfr_set_d(r52572, b, MPFR_RNDN);
        mpfr_mul(r52573, r52563, r52572, MPFR_RNDN);
        mpfr_div(r52574, r52573, r52566, MPFR_RNDN);
        mpfr_add(r52575, r52571, r52574, MPFR_RNDN);
        mpfr_div(r52576, r52568, r52575, MPFR_RNDN);
        return mpfr_get_d(r52576, MPFR_RNDN);
}

static mpfr_t r52577, r52578, r52579, r52580, r52581, r52582, r52583, r52584, r52585, r52586, r52587, r52588, r52589, r52590, r52591, r52592, r52593, r52594, r52595, r52596, r52597, r52598, r52599, r52600, r52601, r52602, r52603, r52604, r52605, r52606, r52607, r52608;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52577);
        mpfr_init_set_str(r52578, "-3.97056359992514e+146", 10, MPFR_RNDN);
        mpfr_init(r52579);
        mpfr_init_set_str(r52580, "1", 10, MPFR_RNDN);
        mpfr_init(r52581);
        mpfr_init(r52582);
        mpfr_init(r52583);
        mpfr_init(r52584);
        mpfr_init_set_str(r52585, "1.0", 10, MPFR_RNDN);
        mpfr_init(r52586);
        mpfr_init(r52587);
        mpfr_init(r52588);
        mpfr_init(r52589);
        mpfr_init(r52590);
        mpfr_init(r52591);
        mpfr_init(r52592);
        mpfr_init(r52593);
        mpfr_init(r52594);
        mpfr_init(r52595);
        mpfr_init_set_str(r52596, "2.719931656851136e+86", 10, MPFR_RNDN);
        mpfr_init(r52597);
        mpfr_init(r52598);
        mpfr_init(r52599);
        mpfr_init(r52600);
        mpfr_init(r52601);
        mpfr_init(r52602);
        mpfr_init(r52603);
        mpfr_init(r52604);
        mpfr_init(r52605);
        mpfr_init(r52606);
        mpfr_init(r52607);
        mpfr_init(r52608);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r52577, t, MPFR_RNDN);
        ;
        mpfr_set_si(r52579, mpfr_cmp(r52577, r52578) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r52581, b, MPFR_RNDN);
        mpfr_set_d(r52582, y, MPFR_RNDN);
        mpfr_div(r52583, r52577, r52582, MPFR_RNDN);
        mpfr_div(r52584, r52581, r52583, MPFR_RNDN);
        ;
        mpfr_set_d(r52586, a, MPFR_RNDN);
        mpfr_add(r52587, r52585, r52586, MPFR_RNDN);
        mpfr_add(r52588, r52584, r52587, MPFR_RNDN);
        mpfr_set_d(r52589, x, MPFR_RNDN);
        mpfr_set_d(r52590, z, MPFR_RNDN);
        mpfr_div(r52591, r52590, r52577, MPFR_RNDN);
        mpfr_mul(r52592, r52582, r52591, MPFR_RNDN);
        mpfr_add(r52593, r52589, r52592, MPFR_RNDN);
        mpfr_div(r52594, r52588, r52593, MPFR_RNDN);
        mpfr_div(r52595, r52580, r52594, MPFR_RNDN);
        ;
        mpfr_set_si(r52597, mpfr_cmp(r52577, r52596) <= 0, MPFR_RNDN);
        mpfr_mul(r52598, r52582, r52590, MPFR_RNDN);
        mpfr_div(r52599, r52580, r52577, MPFR_RNDN);
        mpfr_mul(r52600, r52598, r52599, MPFR_RNDN);
        mpfr_add(r52601, r52589, r52600, MPFR_RNDN);
        mpfr_add(r52602, r52586, r52585, MPFR_RNDN);
        mpfr_mul(r52603, r52582, r52581, MPFR_RNDN);
        mpfr_div(r52604, r52603, r52577, MPFR_RNDN);
        mpfr_add(r52605, r52602, r52604, MPFR_RNDN);
        mpfr_div(r52606, r52601, r52605, MPFR_RNDN);
        if (mpfr_get_si(r52597, MPFR_RNDN)) { mpfr_set(r52607, r52606, MPFR_RNDN); } else { mpfr_set(r52607, r52595, MPFR_RNDN); };
        if (mpfr_get_si(r52579, MPFR_RNDN)) { mpfr_set(r52608, r52595, MPFR_RNDN); } else { mpfr_set(r52608, r52607, MPFR_RNDN); };
        return mpfr_get_d(r52608, MPFR_RNDN);
}

static mpfr_t r52609, r52610, r52611, r52612, r52613, r52614, r52615, r52616, r52617, r52618, r52619, r52620, r52621, r52622, r52623, r52624, r52625, r52626, r52627, r52628, r52629, r52630, r52631, r52632, r52633, r52634, r52635, r52636, r52637, r52638, r52639, r52640;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52609);
        mpfr_init_set_str(r52610, "-3.97056359992514e+146", 10, MPFR_RNDN);
        mpfr_init(r52611);
        mpfr_init_set_str(r52612, "1", 10, MPFR_RNDN);
        mpfr_init(r52613);
        mpfr_init(r52614);
        mpfr_init(r52615);
        mpfr_init(r52616);
        mpfr_init_set_str(r52617, "1.0", 10, MPFR_RNDN);
        mpfr_init(r52618);
        mpfr_init(r52619);
        mpfr_init(r52620);
        mpfr_init(r52621);
        mpfr_init(r52622);
        mpfr_init(r52623);
        mpfr_init(r52624);
        mpfr_init(r52625);
        mpfr_init(r52626);
        mpfr_init(r52627);
        mpfr_init_set_str(r52628, "2.719931656851136e+86", 10, MPFR_RNDN);
        mpfr_init(r52629);
        mpfr_init(r52630);
        mpfr_init(r52631);
        mpfr_init(r52632);
        mpfr_init(r52633);
        mpfr_init(r52634);
        mpfr_init(r52635);
        mpfr_init(r52636);
        mpfr_init(r52637);
        mpfr_init(r52638);
        mpfr_init(r52639);
        mpfr_init(r52640);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r52609, t, MPFR_RNDN);
        ;
        mpfr_set_si(r52611, mpfr_cmp(r52609, r52610) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r52613, b, MPFR_RNDN);
        mpfr_set_d(r52614, y, MPFR_RNDN);
        mpfr_div(r52615, r52609, r52614, MPFR_RNDN);
        mpfr_div(r52616, r52613, r52615, MPFR_RNDN);
        ;
        mpfr_set_d(r52618, a, MPFR_RNDN);
        mpfr_add(r52619, r52617, r52618, MPFR_RNDN);
        mpfr_add(r52620, r52616, r52619, MPFR_RNDN);
        mpfr_set_d(r52621, x, MPFR_RNDN);
        mpfr_set_d(r52622, z, MPFR_RNDN);
        mpfr_div(r52623, r52622, r52609, MPFR_RNDN);
        mpfr_mul(r52624, r52614, r52623, MPFR_RNDN);
        mpfr_add(r52625, r52621, r52624, MPFR_RNDN);
        mpfr_div(r52626, r52620, r52625, MPFR_RNDN);
        mpfr_div(r52627, r52612, r52626, MPFR_RNDN);
        ;
        mpfr_set_si(r52629, mpfr_cmp(r52609, r52628) <= 0, MPFR_RNDN);
        mpfr_mul(r52630, r52614, r52622, MPFR_RNDN);
        mpfr_div(r52631, r52612, r52609, MPFR_RNDN);
        mpfr_mul(r52632, r52630, r52631, MPFR_RNDN);
        mpfr_add(r52633, r52621, r52632, MPFR_RNDN);
        mpfr_add(r52634, r52618, r52617, MPFR_RNDN);
        mpfr_mul(r52635, r52614, r52613, MPFR_RNDN);
        mpfr_div(r52636, r52635, r52609, MPFR_RNDN);
        mpfr_add(r52637, r52634, r52636, MPFR_RNDN);
        mpfr_div(r52638, r52633, r52637, MPFR_RNDN);
        if (mpfr_get_si(r52629, MPFR_RNDN)) { mpfr_set(r52639, r52638, MPFR_RNDN); } else { mpfr_set(r52639, r52627, MPFR_RNDN); };
        if (mpfr_get_si(r52611, MPFR_RNDN)) { mpfr_set(r52640, r52627, MPFR_RNDN); } else { mpfr_set(r52640, r52639, MPFR_RNDN); };
        return mpfr_get_d(r52640, MPFR_RNDN);
}

