#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 r53335 = x;
        float r53336 = y;
        float r53337 = z;
        float r53338 = r53336 * r53337;
        float r53339 = t;
        float r53340 = r53338 / r53339;
        float r53341 = r53335 + r53340;
        float r53342 = a;
        float r53343 = 1.0;
        float r53344 = r53342 + r53343;
        float r53345 = b;
        float r53346 = r53336 * r53345;
        float r53347 = r53346 / r53339;
        float r53348 = r53344 + r53347;
        float r53349 = r53341 / r53348;
        return r53349;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r53350 = x;
        double r53351 = y;
        double r53352 = z;
        double r53353 = r53351 * r53352;
        double r53354 = t;
        double r53355 = r53353 / r53354;
        double r53356 = r53350 + r53355;
        double r53357 = a;
        double r53358 = 1.0;
        double r53359 = r53357 + r53358;
        double r53360 = b;
        double r53361 = r53351 * r53360;
        double r53362 = r53361 / r53354;
        double r53363 = r53359 + r53362;
        double r53364 = r53356 / r53363;
        return r53364;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r53365 = y;
        float r53366 = -4.372782087191589e+174;
        bool r53367 = r53365 <= r53366;
        float r53368 = x;
        float r53369 = z;
        float r53370 = t;
        float r53371 = r53369 / r53370;
        float r53372 = r53365 * r53371;
        float r53373 = r53368 + r53372;
        float r53374 = a;
        float r53375 = 1.0;
        float r53376 = r53374 - r53375;
        float r53377 = r53373 / r53376;
        float r53378 = r53375 + r53374;
        float r53379 = b;
        float r53380 = r53370 / r53379;
        float r53381 = r53378 * r53380;
        float r53382 = r53381 + r53365;
        float r53383 = r53377 / r53382;
        float r53384 = r53376 * r53380;
        float r53385 = r53383 * r53384;
        float r53386 = 2.4363083583046966e+86;
        bool r53387 = r53365 <= r53386;
        float r53388 = r53370 / r53365;
        float r53389 = r53369 / r53388;
        float r53390 = r53368 + r53389;
        float r53391 = r53374 + r53375;
        float r53392 = r53365 * r53379;
        float r53393 = r53392 / r53370;
        float r53394 = r53391 + r53393;
        float r53395 = r53390 / r53394;
        float r53396 = r53387 ? r53395 : r53385;
        float r53397 = r53367 ? r53385 : r53396;
        return r53397;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r53398 = y;
        double r53399 = -4.372782087191589e+174;
        bool r53400 = r53398 <= r53399;
        double r53401 = x;
        double r53402 = z;
        double r53403 = t;
        double r53404 = r53402 / r53403;
        double r53405 = r53398 * r53404;
        double r53406 = r53401 + r53405;
        double r53407 = a;
        double r53408 = 1.0;
        double r53409 = r53407 - r53408;
        double r53410 = r53406 / r53409;
        double r53411 = r53408 + r53407;
        double r53412 = b;
        double r53413 = r53403 / r53412;
        double r53414 = r53411 * r53413;
        double r53415 = r53414 + r53398;
        double r53416 = r53410 / r53415;
        double r53417 = r53409 * r53413;
        double r53418 = r53416 * r53417;
        double r53419 = 2.4363083583046966e+86;
        bool r53420 = r53398 <= r53419;
        double r53421 = r53403 / r53398;
        double r53422 = r53402 / r53421;
        double r53423 = r53401 + r53422;
        double r53424 = r53407 + r53408;
        double r53425 = r53398 * r53412;
        double r53426 = r53425 / r53403;
        double r53427 = r53424 + r53426;
        double r53428 = r53423 / r53427;
        double r53429 = r53420 ? r53428 : r53418;
        double r53430 = r53400 ? r53418 : r53429;
        return r53430;
}

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 r53431, r53432, r53433, r53434, r53435, r53436, r53437, r53438, r53439, r53440, r53441, r53442, r53443, r53444, r53445;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53431);
        mpfr_init(r53432);
        mpfr_init(r53433);
        mpfr_init(r53434);
        mpfr_init(r53435);
        mpfr_init(r53436);
        mpfr_init(r53437);
        mpfr_init(r53438);
        mpfr_init_set_str(r53439, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53440);
        mpfr_init(r53441);
        mpfr_init(r53442);
        mpfr_init(r53443);
        mpfr_init(r53444);
        mpfr_init(r53445);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53431, x, MPFR_RNDN);
        mpfr_set_d(r53432, y, MPFR_RNDN);
        mpfr_set_d(r53433, z, MPFR_RNDN);
        mpfr_mul(r53434, r53432, r53433, MPFR_RNDN);
        mpfr_set_d(r53435, t, MPFR_RNDN);
        mpfr_div(r53436, r53434, r53435, MPFR_RNDN);
        mpfr_add(r53437, r53431, r53436, MPFR_RNDN);
        mpfr_set_d(r53438, a, MPFR_RNDN);
        ;
        mpfr_add(r53440, r53438, r53439, MPFR_RNDN);
        mpfr_set_d(r53441, b, MPFR_RNDN);
        mpfr_mul(r53442, r53432, r53441, MPFR_RNDN);
        mpfr_div(r53443, r53442, r53435, MPFR_RNDN);
        mpfr_add(r53444, r53440, r53443, MPFR_RNDN);
        mpfr_div(r53445, r53437, r53444, MPFR_RNDN);
        return mpfr_get_d(r53445, MPFR_RNDN);
}

static mpfr_t r53446, r53447, r53448, r53449, r53450, r53451, r53452, r53453, r53454, r53455, r53456, r53457, r53458, r53459, r53460, r53461, r53462, r53463, r53464, r53465, r53466, r53467, r53468, r53469, r53470, r53471, r53472, r53473, r53474, r53475, r53476, r53477, r53478;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53446);
        mpfr_init_set_str(r53447, "-4.372782087191589e+174", 10, MPFR_RNDN);
        mpfr_init(r53448);
        mpfr_init(r53449);
        mpfr_init(r53450);
        mpfr_init(r53451);
        mpfr_init(r53452);
        mpfr_init(r53453);
        mpfr_init(r53454);
        mpfr_init(r53455);
        mpfr_init_set_str(r53456, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53457);
        mpfr_init(r53458);
        mpfr_init(r53459);
        mpfr_init(r53460);
        mpfr_init(r53461);
        mpfr_init(r53462);
        mpfr_init(r53463);
        mpfr_init(r53464);
        mpfr_init(r53465);
        mpfr_init(r53466);
        mpfr_init_set_str(r53467, "2.4363083583046966e+86", 10, MPFR_RNDN);
        mpfr_init(r53468);
        mpfr_init(r53469);
        mpfr_init(r53470);
        mpfr_init(r53471);
        mpfr_init(r53472);
        mpfr_init(r53473);
        mpfr_init(r53474);
        mpfr_init(r53475);
        mpfr_init(r53476);
        mpfr_init(r53477);
        mpfr_init(r53478);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53446, y, MPFR_RNDN);
        ;
        mpfr_set_si(r53448, mpfr_cmp(r53446, r53447) <= 0, MPFR_RNDN);
        mpfr_set_d(r53449, x, MPFR_RNDN);
        mpfr_set_d(r53450, z, MPFR_RNDN);
        mpfr_set_d(r53451, t, MPFR_RNDN);
        mpfr_div(r53452, r53450, r53451, MPFR_RNDN);
        mpfr_mul(r53453, r53446, r53452, MPFR_RNDN);
        mpfr_add(r53454, r53449, r53453, MPFR_RNDN);
        mpfr_set_d(r53455, a, MPFR_RNDN);
        ;
        mpfr_sub(r53457, r53455, r53456, MPFR_RNDN);
        mpfr_div(r53458, r53454, r53457, MPFR_RNDN);
        mpfr_add(r53459, r53456, r53455, MPFR_RNDN);
        mpfr_set_d(r53460, b, MPFR_RNDN);
        mpfr_div(r53461, r53451, r53460, MPFR_RNDN);
        mpfr_mul(r53462, r53459, r53461, MPFR_RNDN);
        mpfr_add(r53463, r53462, r53446, MPFR_RNDN);
        mpfr_div(r53464, r53458, r53463, MPFR_RNDN);
        mpfr_mul(r53465, r53457, r53461, MPFR_RNDN);
        mpfr_mul(r53466, r53464, r53465, MPFR_RNDN);
        ;
        mpfr_set_si(r53468, mpfr_cmp(r53446, r53467) <= 0, MPFR_RNDN);
        mpfr_div(r53469, r53451, r53446, MPFR_RNDN);
        mpfr_div(r53470, r53450, r53469, MPFR_RNDN);
        mpfr_add(r53471, r53449, r53470, MPFR_RNDN);
        mpfr_add(r53472, r53455, r53456, MPFR_RNDN);
        mpfr_mul(r53473, r53446, r53460, MPFR_RNDN);
        mpfr_div(r53474, r53473, r53451, MPFR_RNDN);
        mpfr_add(r53475, r53472, r53474, MPFR_RNDN);
        mpfr_div(r53476, r53471, r53475, MPFR_RNDN);
        if (mpfr_get_si(r53468, MPFR_RNDN)) { mpfr_set(r53477, r53476, MPFR_RNDN); } else { mpfr_set(r53477, r53466, MPFR_RNDN); };
        if (mpfr_get_si(r53448, MPFR_RNDN)) { mpfr_set(r53478, r53466, MPFR_RNDN); } else { mpfr_set(r53478, r53477, MPFR_RNDN); };
        return mpfr_get_d(r53478, MPFR_RNDN);
}

static mpfr_t r53479, r53480, r53481, r53482, r53483, r53484, r53485, r53486, r53487, r53488, r53489, r53490, r53491, r53492, r53493, r53494, r53495, r53496, r53497, r53498, r53499, r53500, r53501, r53502, r53503, r53504, r53505, r53506, r53507, r53508, r53509, r53510, r53511;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53479);
        mpfr_init_set_str(r53480, "-4.372782087191589e+174", 10, MPFR_RNDN);
        mpfr_init(r53481);
        mpfr_init(r53482);
        mpfr_init(r53483);
        mpfr_init(r53484);
        mpfr_init(r53485);
        mpfr_init(r53486);
        mpfr_init(r53487);
        mpfr_init(r53488);
        mpfr_init_set_str(r53489, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53490);
        mpfr_init(r53491);
        mpfr_init(r53492);
        mpfr_init(r53493);
        mpfr_init(r53494);
        mpfr_init(r53495);
        mpfr_init(r53496);
        mpfr_init(r53497);
        mpfr_init(r53498);
        mpfr_init(r53499);
        mpfr_init_set_str(r53500, "2.4363083583046966e+86", 10, MPFR_RNDN);
        mpfr_init(r53501);
        mpfr_init(r53502);
        mpfr_init(r53503);
        mpfr_init(r53504);
        mpfr_init(r53505);
        mpfr_init(r53506);
        mpfr_init(r53507);
        mpfr_init(r53508);
        mpfr_init(r53509);
        mpfr_init(r53510);
        mpfr_init(r53511);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53479, y, MPFR_RNDN);
        ;
        mpfr_set_si(r53481, mpfr_cmp(r53479, r53480) <= 0, MPFR_RNDN);
        mpfr_set_d(r53482, x, MPFR_RNDN);
        mpfr_set_d(r53483, z, MPFR_RNDN);
        mpfr_set_d(r53484, t, MPFR_RNDN);
        mpfr_div(r53485, r53483, r53484, MPFR_RNDN);
        mpfr_mul(r53486, r53479, r53485, MPFR_RNDN);
        mpfr_add(r53487, r53482, r53486, MPFR_RNDN);
        mpfr_set_d(r53488, a, MPFR_RNDN);
        ;
        mpfr_sub(r53490, r53488, r53489, MPFR_RNDN);
        mpfr_div(r53491, r53487, r53490, MPFR_RNDN);
        mpfr_add(r53492, r53489, r53488, MPFR_RNDN);
        mpfr_set_d(r53493, b, MPFR_RNDN);
        mpfr_div(r53494, r53484, r53493, MPFR_RNDN);
        mpfr_mul(r53495, r53492, r53494, MPFR_RNDN);
        mpfr_add(r53496, r53495, r53479, MPFR_RNDN);
        mpfr_div(r53497, r53491, r53496, MPFR_RNDN);
        mpfr_mul(r53498, r53490, r53494, MPFR_RNDN);
        mpfr_mul(r53499, r53497, r53498, MPFR_RNDN);
        ;
        mpfr_set_si(r53501, mpfr_cmp(r53479, r53500) <= 0, MPFR_RNDN);
        mpfr_div(r53502, r53484, r53479, MPFR_RNDN);
        mpfr_div(r53503, r53483, r53502, MPFR_RNDN);
        mpfr_add(r53504, r53482, r53503, MPFR_RNDN);
        mpfr_add(r53505, r53488, r53489, MPFR_RNDN);
        mpfr_mul(r53506, r53479, r53493, MPFR_RNDN);
        mpfr_div(r53507, r53506, r53484, MPFR_RNDN);
        mpfr_add(r53508, r53505, r53507, MPFR_RNDN);
        mpfr_div(r53509, r53504, r53508, MPFR_RNDN);
        if (mpfr_get_si(r53501, MPFR_RNDN)) { mpfr_set(r53510, r53509, MPFR_RNDN); } else { mpfr_set(r53510, r53499, MPFR_RNDN); };
        if (mpfr_get_si(r53481, MPFR_RNDN)) { mpfr_set(r53511, r53499, MPFR_RNDN); } else { mpfr_set(r53511, r53510, MPFR_RNDN); };
        return mpfr_get_d(r53511, MPFR_RNDN);
}

