#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 r53537 = x;
        float r53538 = y;
        float r53539 = z;
        float r53540 = r53538 * r53539;
        float r53541 = t;
        float r53542 = r53540 / r53541;
        float r53543 = r53537 + r53542;
        float r53544 = a;
        float r53545 = 1.0;
        float r53546 = r53544 + r53545;
        float r53547 = b;
        float r53548 = r53538 * r53547;
        float r53549 = r53548 / r53541;
        float r53550 = r53546 + r53549;
        float r53551 = r53543 / r53550;
        return r53551;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r53552 = x;
        double r53553 = y;
        double r53554 = z;
        double r53555 = r53553 * r53554;
        double r53556 = t;
        double r53557 = r53555 / r53556;
        double r53558 = r53552 + r53557;
        double r53559 = a;
        double r53560 = 1.0;
        double r53561 = r53559 + r53560;
        double r53562 = b;
        double r53563 = r53553 * r53562;
        double r53564 = r53563 / r53556;
        double r53565 = r53561 + r53564;
        double r53566 = r53558 / r53565;
        return r53566;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r53567 = y;
        float r53568 = -1.1703200330472533e+174;
        bool r53569 = r53567 <= r53568;
        float r53570 = x;
        float r53571 = z;
        float r53572 = t;
        float r53573 = r53571 / r53572;
        float r53574 = r53567 * r53573;
        float r53575 = r53570 + r53574;
        float r53576 = a;
        float r53577 = 1.0;
        float r53578 = r53576 - r53577;
        float r53579 = r53575 / r53578;
        float r53580 = r53577 + r53576;
        float r53581 = b;
        float r53582 = r53572 / r53581;
        float r53583 = r53580 * r53582;
        float r53584 = r53583 + r53567;
        float r53585 = r53579 / r53584;
        float r53586 = r53578 * r53582;
        float r53587 = r53585 * r53586;
        float r53588 = 4.872599708992765e+86;
        bool r53589 = r53567 <= r53588;
        float r53590 = r53572 / r53567;
        float r53591 = r53571 / r53590;
        float r53592 = r53570 + r53591;
        float r53593 = r53576 + r53577;
        float r53594 = r53567 * r53581;
        float r53595 = r53594 / r53572;
        float r53596 = r53593 + r53595;
        float r53597 = r53592 / r53596;
        float r53598 = r53589 ? r53597 : r53587;
        float r53599 = r53569 ? r53587 : r53598;
        return r53599;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r53600 = y;
        double r53601 = -1.1703200330472533e+174;
        bool r53602 = r53600 <= r53601;
        double r53603 = x;
        double r53604 = z;
        double r53605 = t;
        double r53606 = r53604 / r53605;
        double r53607 = r53600 * r53606;
        double r53608 = r53603 + r53607;
        double r53609 = a;
        double r53610 = 1.0;
        double r53611 = r53609 - r53610;
        double r53612 = r53608 / r53611;
        double r53613 = r53610 + r53609;
        double r53614 = b;
        double r53615 = r53605 / r53614;
        double r53616 = r53613 * r53615;
        double r53617 = r53616 + r53600;
        double r53618 = r53612 / r53617;
        double r53619 = r53611 * r53615;
        double r53620 = r53618 * r53619;
        double r53621 = 4.872599708992765e+86;
        bool r53622 = r53600 <= r53621;
        double r53623 = r53605 / r53600;
        double r53624 = r53604 / r53623;
        double r53625 = r53603 + r53624;
        double r53626 = r53609 + r53610;
        double r53627 = r53600 * r53614;
        double r53628 = r53627 / r53605;
        double r53629 = r53626 + r53628;
        double r53630 = r53625 / r53629;
        double r53631 = r53622 ? r53630 : r53620;
        double r53632 = r53602 ? r53620 : r53631;
        return r53632;
}

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 r53633, r53634, r53635, r53636, r53637, r53638, r53639, r53640, r53641, r53642, r53643, r53644, r53645, r53646, r53647;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53633);
        mpfr_init(r53634);
        mpfr_init(r53635);
        mpfr_init(r53636);
        mpfr_init(r53637);
        mpfr_init(r53638);
        mpfr_init(r53639);
        mpfr_init(r53640);
        mpfr_init_set_str(r53641, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53642);
        mpfr_init(r53643);
        mpfr_init(r53644);
        mpfr_init(r53645);
        mpfr_init(r53646);
        mpfr_init(r53647);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53633, x, MPFR_RNDN);
        mpfr_set_d(r53634, y, MPFR_RNDN);
        mpfr_set_d(r53635, z, MPFR_RNDN);
        mpfr_mul(r53636, r53634, r53635, MPFR_RNDN);
        mpfr_set_d(r53637, t, MPFR_RNDN);
        mpfr_div(r53638, r53636, r53637, MPFR_RNDN);
        mpfr_add(r53639, r53633, r53638, MPFR_RNDN);
        mpfr_set_d(r53640, a, MPFR_RNDN);
        ;
        mpfr_add(r53642, r53640, r53641, MPFR_RNDN);
        mpfr_set_d(r53643, b, MPFR_RNDN);
        mpfr_mul(r53644, r53634, r53643, MPFR_RNDN);
        mpfr_div(r53645, r53644, r53637, MPFR_RNDN);
        mpfr_add(r53646, r53642, r53645, MPFR_RNDN);
        mpfr_div(r53647, r53639, r53646, MPFR_RNDN);
        return mpfr_get_d(r53647, MPFR_RNDN);
}

static mpfr_t r53648, r53649, r53650, r53651, r53652, r53653, r53654, r53655, r53656, r53657, r53658, r53659, r53660, r53661, r53662, r53663, r53664, r53665, r53666, r53667, r53668, r53669, r53670, r53671, r53672, r53673, r53674, r53675, r53676, r53677, r53678, r53679, r53680;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53648);
        mpfr_init_set_str(r53649, "-1.1703200330472533e+174", 10, MPFR_RNDN);
        mpfr_init(r53650);
        mpfr_init(r53651);
        mpfr_init(r53652);
        mpfr_init(r53653);
        mpfr_init(r53654);
        mpfr_init(r53655);
        mpfr_init(r53656);
        mpfr_init(r53657);
        mpfr_init_set_str(r53658, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53659);
        mpfr_init(r53660);
        mpfr_init(r53661);
        mpfr_init(r53662);
        mpfr_init(r53663);
        mpfr_init(r53664);
        mpfr_init(r53665);
        mpfr_init(r53666);
        mpfr_init(r53667);
        mpfr_init(r53668);
        mpfr_init_set_str(r53669, "4.872599708992765e+86", 10, MPFR_RNDN);
        mpfr_init(r53670);
        mpfr_init(r53671);
        mpfr_init(r53672);
        mpfr_init(r53673);
        mpfr_init(r53674);
        mpfr_init(r53675);
        mpfr_init(r53676);
        mpfr_init(r53677);
        mpfr_init(r53678);
        mpfr_init(r53679);
        mpfr_init(r53680);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53648, y, MPFR_RNDN);
        ;
        mpfr_set_si(r53650, mpfr_cmp(r53648, r53649) <= 0, MPFR_RNDN);
        mpfr_set_d(r53651, x, MPFR_RNDN);
        mpfr_set_d(r53652, z, MPFR_RNDN);
        mpfr_set_d(r53653, t, MPFR_RNDN);
        mpfr_div(r53654, r53652, r53653, MPFR_RNDN);
        mpfr_mul(r53655, r53648, r53654, MPFR_RNDN);
        mpfr_add(r53656, r53651, r53655, MPFR_RNDN);
        mpfr_set_d(r53657, a, MPFR_RNDN);
        ;
        mpfr_sub(r53659, r53657, r53658, MPFR_RNDN);
        mpfr_div(r53660, r53656, r53659, MPFR_RNDN);
        mpfr_add(r53661, r53658, r53657, MPFR_RNDN);
        mpfr_set_d(r53662, b, MPFR_RNDN);
        mpfr_div(r53663, r53653, r53662, MPFR_RNDN);
        mpfr_mul(r53664, r53661, r53663, MPFR_RNDN);
        mpfr_add(r53665, r53664, r53648, MPFR_RNDN);
        mpfr_div(r53666, r53660, r53665, MPFR_RNDN);
        mpfr_mul(r53667, r53659, r53663, MPFR_RNDN);
        mpfr_mul(r53668, r53666, r53667, MPFR_RNDN);
        ;
        mpfr_set_si(r53670, mpfr_cmp(r53648, r53669) <= 0, MPFR_RNDN);
        mpfr_div(r53671, r53653, r53648, MPFR_RNDN);
        mpfr_div(r53672, r53652, r53671, MPFR_RNDN);
        mpfr_add(r53673, r53651, r53672, MPFR_RNDN);
        mpfr_add(r53674, r53657, r53658, MPFR_RNDN);
        mpfr_mul(r53675, r53648, r53662, MPFR_RNDN);
        mpfr_div(r53676, r53675, r53653, MPFR_RNDN);
        mpfr_add(r53677, r53674, r53676, MPFR_RNDN);
        mpfr_div(r53678, r53673, r53677, MPFR_RNDN);
        if (mpfr_get_si(r53670, MPFR_RNDN)) { mpfr_set(r53679, r53678, MPFR_RNDN); } else { mpfr_set(r53679, r53668, MPFR_RNDN); };
        if (mpfr_get_si(r53650, MPFR_RNDN)) { mpfr_set(r53680, r53668, MPFR_RNDN); } else { mpfr_set(r53680, r53679, MPFR_RNDN); };
        return mpfr_get_d(r53680, MPFR_RNDN);
}

static mpfr_t r53681, r53682, r53683, r53684, r53685, r53686, r53687, r53688, r53689, r53690, r53691, r53692, r53693, r53694, r53695, r53696, r53697, r53698, r53699, r53700, r53701, r53702, r53703, r53704, r53705, r53706, r53707, r53708, r53709, r53710, r53711, r53712, r53713;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53681);
        mpfr_init_set_str(r53682, "-1.1703200330472533e+174", 10, MPFR_RNDN);
        mpfr_init(r53683);
        mpfr_init(r53684);
        mpfr_init(r53685);
        mpfr_init(r53686);
        mpfr_init(r53687);
        mpfr_init(r53688);
        mpfr_init(r53689);
        mpfr_init(r53690);
        mpfr_init_set_str(r53691, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53692);
        mpfr_init(r53693);
        mpfr_init(r53694);
        mpfr_init(r53695);
        mpfr_init(r53696);
        mpfr_init(r53697);
        mpfr_init(r53698);
        mpfr_init(r53699);
        mpfr_init(r53700);
        mpfr_init(r53701);
        mpfr_init_set_str(r53702, "4.872599708992765e+86", 10, MPFR_RNDN);
        mpfr_init(r53703);
        mpfr_init(r53704);
        mpfr_init(r53705);
        mpfr_init(r53706);
        mpfr_init(r53707);
        mpfr_init(r53708);
        mpfr_init(r53709);
        mpfr_init(r53710);
        mpfr_init(r53711);
        mpfr_init(r53712);
        mpfr_init(r53713);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53681, y, MPFR_RNDN);
        ;
        mpfr_set_si(r53683, mpfr_cmp(r53681, r53682) <= 0, MPFR_RNDN);
        mpfr_set_d(r53684, x, MPFR_RNDN);
        mpfr_set_d(r53685, z, MPFR_RNDN);
        mpfr_set_d(r53686, t, MPFR_RNDN);
        mpfr_div(r53687, r53685, r53686, MPFR_RNDN);
        mpfr_mul(r53688, r53681, r53687, MPFR_RNDN);
        mpfr_add(r53689, r53684, r53688, MPFR_RNDN);
        mpfr_set_d(r53690, a, MPFR_RNDN);
        ;
        mpfr_sub(r53692, r53690, r53691, MPFR_RNDN);
        mpfr_div(r53693, r53689, r53692, MPFR_RNDN);
        mpfr_add(r53694, r53691, r53690, MPFR_RNDN);
        mpfr_set_d(r53695, b, MPFR_RNDN);
        mpfr_div(r53696, r53686, r53695, MPFR_RNDN);
        mpfr_mul(r53697, r53694, r53696, MPFR_RNDN);
        mpfr_add(r53698, r53697, r53681, MPFR_RNDN);
        mpfr_div(r53699, r53693, r53698, MPFR_RNDN);
        mpfr_mul(r53700, r53692, r53696, MPFR_RNDN);
        mpfr_mul(r53701, r53699, r53700, MPFR_RNDN);
        ;
        mpfr_set_si(r53703, mpfr_cmp(r53681, r53702) <= 0, MPFR_RNDN);
        mpfr_div(r53704, r53686, r53681, MPFR_RNDN);
        mpfr_div(r53705, r53685, r53704, MPFR_RNDN);
        mpfr_add(r53706, r53684, r53705, MPFR_RNDN);
        mpfr_add(r53707, r53690, r53691, MPFR_RNDN);
        mpfr_mul(r53708, r53681, r53695, MPFR_RNDN);
        mpfr_div(r53709, r53708, r53686, MPFR_RNDN);
        mpfr_add(r53710, r53707, r53709, MPFR_RNDN);
        mpfr_div(r53711, r53706, r53710, MPFR_RNDN);
        if (mpfr_get_si(r53703, MPFR_RNDN)) { mpfr_set(r53712, r53711, MPFR_RNDN); } else { mpfr_set(r53712, r53701, MPFR_RNDN); };
        if (mpfr_get_si(r53683, MPFR_RNDN)) { mpfr_set(r53713, r53701, MPFR_RNDN); } else { mpfr_set(r53713, r53712, MPFR_RNDN); };
        return mpfr_get_d(r53713, MPFR_RNDN);
}

