#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 r53305 = x;
        float r53306 = y;
        float r53307 = z;
        float r53308 = r53306 * r53307;
        float r53309 = t;
        float r53310 = r53308 / r53309;
        float r53311 = r53305 + r53310;
        float r53312 = a;
        float r53313 = 1.0;
        float r53314 = r53312 + r53313;
        float r53315 = b;
        float r53316 = r53306 * r53315;
        float r53317 = r53316 / r53309;
        float r53318 = r53314 + r53317;
        float r53319 = r53311 / r53318;
        return r53319;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r53320 = x;
        double r53321 = y;
        double r53322 = z;
        double r53323 = r53321 * r53322;
        double r53324 = t;
        double r53325 = r53323 / r53324;
        double r53326 = r53320 + r53325;
        double r53327 = a;
        double r53328 = 1.0;
        double r53329 = r53327 + r53328;
        double r53330 = b;
        double r53331 = r53321 * r53330;
        double r53332 = r53331 / r53324;
        double r53333 = r53329 + r53332;
        double r53334 = r53326 / r53333;
        return r53334;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r53335 = y;
        float r53336 = -1.0283268166580833e+173;
        bool r53337 = r53335 <= r53336;
        float r53338 = x;
        float r53339 = z;
        float r53340 = t;
        float r53341 = r53339 / r53340;
        float r53342 = r53335 * r53341;
        float r53343 = r53338 + r53342;
        float r53344 = a;
        float r53345 = 1.0;
        float r53346 = r53344 - r53345;
        float r53347 = r53343 / r53346;
        float r53348 = r53345 + r53344;
        float r53349 = b;
        float r53350 = r53340 / r53349;
        float r53351 = r53348 * r53350;
        float r53352 = r53351 + r53335;
        float r53353 = r53347 / r53352;
        float r53354 = r53346 * r53350;
        float r53355 = r53353 * r53354;
        float r53356 = 5.197438555751174e+86;
        bool r53357 = r53335 <= r53356;
        float r53358 = r53340 / r53335;
        float r53359 = r53339 / r53358;
        float r53360 = r53338 + r53359;
        float r53361 = r53344 + r53345;
        float r53362 = r53335 * r53349;
        float r53363 = r53362 / r53340;
        float r53364 = r53361 + r53363;
        float r53365 = r53360 / r53364;
        float r53366 = r53357 ? r53365 : r53355;
        float r53367 = r53337 ? r53355 : r53366;
        return r53367;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r53368 = y;
        double r53369 = -1.0283268166580833e+173;
        bool r53370 = r53368 <= r53369;
        double r53371 = x;
        double r53372 = z;
        double r53373 = t;
        double r53374 = r53372 / r53373;
        double r53375 = r53368 * r53374;
        double r53376 = r53371 + r53375;
        double r53377 = a;
        double r53378 = 1.0;
        double r53379 = r53377 - r53378;
        double r53380 = r53376 / r53379;
        double r53381 = r53378 + r53377;
        double r53382 = b;
        double r53383 = r53373 / r53382;
        double r53384 = r53381 * r53383;
        double r53385 = r53384 + r53368;
        double r53386 = r53380 / r53385;
        double r53387 = r53379 * r53383;
        double r53388 = r53386 * r53387;
        double r53389 = 5.197438555751174e+86;
        bool r53390 = r53368 <= r53389;
        double r53391 = r53373 / r53368;
        double r53392 = r53372 / r53391;
        double r53393 = r53371 + r53392;
        double r53394 = r53377 + r53378;
        double r53395 = r53368 * r53382;
        double r53396 = r53395 / r53373;
        double r53397 = r53394 + r53396;
        double r53398 = r53393 / r53397;
        double r53399 = r53390 ? r53398 : r53388;
        double r53400 = r53370 ? r53388 : r53399;
        return r53400;
}

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 r53401, r53402, r53403, r53404, r53405, r53406, r53407, r53408, r53409, r53410, r53411, r53412, r53413, r53414, r53415;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53401);
        mpfr_init(r53402);
        mpfr_init(r53403);
        mpfr_init(r53404);
        mpfr_init(r53405);
        mpfr_init(r53406);
        mpfr_init(r53407);
        mpfr_init(r53408);
        mpfr_init_set_str(r53409, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53410);
        mpfr_init(r53411);
        mpfr_init(r53412);
        mpfr_init(r53413);
        mpfr_init(r53414);
        mpfr_init(r53415);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53401, x, MPFR_RNDN);
        mpfr_set_d(r53402, y, MPFR_RNDN);
        mpfr_set_d(r53403, z, MPFR_RNDN);
        mpfr_mul(r53404, r53402, r53403, MPFR_RNDN);
        mpfr_set_d(r53405, t, MPFR_RNDN);
        mpfr_div(r53406, r53404, r53405, MPFR_RNDN);
        mpfr_add(r53407, r53401, r53406, MPFR_RNDN);
        mpfr_set_d(r53408, a, MPFR_RNDN);
        ;
        mpfr_add(r53410, r53408, r53409, MPFR_RNDN);
        mpfr_set_d(r53411, b, MPFR_RNDN);
        mpfr_mul(r53412, r53402, r53411, MPFR_RNDN);
        mpfr_div(r53413, r53412, r53405, MPFR_RNDN);
        mpfr_add(r53414, r53410, r53413, MPFR_RNDN);
        mpfr_div(r53415, r53407, r53414, MPFR_RNDN);
        return mpfr_get_d(r53415, MPFR_RNDN);
}

static mpfr_t r53416, r53417, r53418, r53419, r53420, r53421, r53422, r53423, r53424, r53425, r53426, r53427, r53428, r53429, r53430, r53431, r53432, r53433, r53434, r53435, r53436, r53437, r53438, r53439, r53440, r53441, r53442, r53443, r53444, r53445, r53446, r53447, r53448;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53416);
        mpfr_init_set_str(r53417, "-1.0283268166580833e+173", 10, MPFR_RNDN);
        mpfr_init(r53418);
        mpfr_init(r53419);
        mpfr_init(r53420);
        mpfr_init(r53421);
        mpfr_init(r53422);
        mpfr_init(r53423);
        mpfr_init(r53424);
        mpfr_init(r53425);
        mpfr_init_set_str(r53426, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53427);
        mpfr_init(r53428);
        mpfr_init(r53429);
        mpfr_init(r53430);
        mpfr_init(r53431);
        mpfr_init(r53432);
        mpfr_init(r53433);
        mpfr_init(r53434);
        mpfr_init(r53435);
        mpfr_init(r53436);
        mpfr_init_set_str(r53437, "5.197438555751174e+86", 10, MPFR_RNDN);
        mpfr_init(r53438);
        mpfr_init(r53439);
        mpfr_init(r53440);
        mpfr_init(r53441);
        mpfr_init(r53442);
        mpfr_init(r53443);
        mpfr_init(r53444);
        mpfr_init(r53445);
        mpfr_init(r53446);
        mpfr_init(r53447);
        mpfr_init(r53448);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53416, y, MPFR_RNDN);
        ;
        mpfr_set_si(r53418, mpfr_cmp(r53416, r53417) <= 0, MPFR_RNDN);
        mpfr_set_d(r53419, x, MPFR_RNDN);
        mpfr_set_d(r53420, z, MPFR_RNDN);
        mpfr_set_d(r53421, t, MPFR_RNDN);
        mpfr_div(r53422, r53420, r53421, MPFR_RNDN);
        mpfr_mul(r53423, r53416, r53422, MPFR_RNDN);
        mpfr_add(r53424, r53419, r53423, MPFR_RNDN);
        mpfr_set_d(r53425, a, MPFR_RNDN);
        ;
        mpfr_sub(r53427, r53425, r53426, MPFR_RNDN);
        mpfr_div(r53428, r53424, r53427, MPFR_RNDN);
        mpfr_add(r53429, r53426, r53425, MPFR_RNDN);
        mpfr_set_d(r53430, b, MPFR_RNDN);
        mpfr_div(r53431, r53421, r53430, MPFR_RNDN);
        mpfr_mul(r53432, r53429, r53431, MPFR_RNDN);
        mpfr_add(r53433, r53432, r53416, MPFR_RNDN);
        mpfr_div(r53434, r53428, r53433, MPFR_RNDN);
        mpfr_mul(r53435, r53427, r53431, MPFR_RNDN);
        mpfr_mul(r53436, r53434, r53435, MPFR_RNDN);
        ;
        mpfr_set_si(r53438, mpfr_cmp(r53416, r53437) <= 0, MPFR_RNDN);
        mpfr_div(r53439, r53421, r53416, MPFR_RNDN);
        mpfr_div(r53440, r53420, r53439, MPFR_RNDN);
        mpfr_add(r53441, r53419, r53440, MPFR_RNDN);
        mpfr_add(r53442, r53425, r53426, MPFR_RNDN);
        mpfr_mul(r53443, r53416, r53430, MPFR_RNDN);
        mpfr_div(r53444, r53443, r53421, MPFR_RNDN);
        mpfr_add(r53445, r53442, r53444, MPFR_RNDN);
        mpfr_div(r53446, r53441, r53445, MPFR_RNDN);
        if (mpfr_get_si(r53438, MPFR_RNDN)) { mpfr_set(r53447, r53446, MPFR_RNDN); } else { mpfr_set(r53447, r53436, MPFR_RNDN); };
        if (mpfr_get_si(r53418, MPFR_RNDN)) { mpfr_set(r53448, r53436, MPFR_RNDN); } else { mpfr_set(r53448, r53447, MPFR_RNDN); };
        return mpfr_get_d(r53448, MPFR_RNDN);
}

static mpfr_t 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, r53479, r53480, r53481;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53449);
        mpfr_init_set_str(r53450, "-1.0283268166580833e+173", 10, MPFR_RNDN);
        mpfr_init(r53451);
        mpfr_init(r53452);
        mpfr_init(r53453);
        mpfr_init(r53454);
        mpfr_init(r53455);
        mpfr_init(r53456);
        mpfr_init(r53457);
        mpfr_init(r53458);
        mpfr_init_set_str(r53459, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53460);
        mpfr_init(r53461);
        mpfr_init(r53462);
        mpfr_init(r53463);
        mpfr_init(r53464);
        mpfr_init(r53465);
        mpfr_init(r53466);
        mpfr_init(r53467);
        mpfr_init(r53468);
        mpfr_init(r53469);
        mpfr_init_set_str(r53470, "5.197438555751174e+86", 10, MPFR_RNDN);
        mpfr_init(r53471);
        mpfr_init(r53472);
        mpfr_init(r53473);
        mpfr_init(r53474);
        mpfr_init(r53475);
        mpfr_init(r53476);
        mpfr_init(r53477);
        mpfr_init(r53478);
        mpfr_init(r53479);
        mpfr_init(r53480);
        mpfr_init(r53481);
}

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

