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

char *name = "Toniolo and Linder, Equation (13)";

double f_if(float n, float U, float t, float l, float Om, float U_) {
        float r19328 = 2.0f;
        float r19329 = n;
        float r19330 = r19328 * r19329;
        float r19331 = U;
        float r19332 = r19330 * r19331;
        float r19333 = t;
        float r19334 = l;
        float r19335 = r19334 * r19334;
        float r19336 = Om;
        float r19337 = r19335 / r19336;
        float r19338 = r19328 * r19337;
        float r19339 = r19333 - r19338;
        float r19340 = r19334 / r19336;
        float r19341 = r19340 * r19340;
        float r19342 = r19329 * r19341;
        float r19343 = U_;
        float r19344 = r19331 - r19343;
        float r19345 = r19342 * r19344;
        float r19346 = r19339 - r19345;
        float r19347 = r19332 * r19346;
        float r19348 = sqrt(r19347);
        return r19348;
}

double f_id(double n, double U, double t, double l, double Om, double U_) {
        double r19349 = 2.0;
        double r19350 = n;
        double r19351 = r19349 * r19350;
        double r19352 = U;
        double r19353 = r19351 * r19352;
        double r19354 = t;
        double r19355 = l;
        double r19356 = r19355 * r19355;
        double r19357 = Om;
        double r19358 = r19356 / r19357;
        double r19359 = r19349 * r19358;
        double r19360 = r19354 - r19359;
        double r19361 = r19355 / r19357;
        double r19362 = r19361 * r19361;
        double r19363 = r19350 * r19362;
        double r19364 = U_;
        double r19365 = r19352 - r19364;
        double r19366 = r19363 * r19365;
        double r19367 = r19360 - r19366;
        double r19368 = r19353 * r19367;
        double r19369 = sqrt(r19368);
        return r19369;
}


double f_of(float n, float U, float t, float l, float Om, float U_) {
        float r19370 = n;
        float r19371 = 1.5063727889175555e-275f;
        bool r19372 = r19370 <= r19371;
        float r19373 = 2.0f;
        float r19374 = r19373 * r19370;
        float r19375 = U;
        float r19376 = t;
        float r19377 = l;
        float r19378 = Om;
        float r19379 = r19378 / r19377;
        float r19380 = r19377 / r19379;
        float r19381 = r19373 * r19380;
        float r19382 = r19376 - r19381;
        float r19383 = r19377 / r19378;
        float r19384 = r19383 * r19383;
        float r19385 = r19370 * r19384;
        float r19386 = U_;
        float r19387 = r19375 - r19386;
        float r19388 = r19385 * r19387;
        float r19389 = r19382 - r19388;
        float r19390 = cbrt(r19389);
        float r19391 = r19390 * (r19390 * r19390);
        float r19392 = r19375 * r19391;
        float r19393 = r19374 * r19392;
        float r19394 = sqrt(r19393);
        float r19395 = sqrt(r19374);
        float r19396 = r19375 * r19389;
        float r19397 = sqrt(r19396);
        float r19398 = r19395 * r19397;
        float r19399 = r19372 ? r19394 : r19398;
        return r19399;
}

double f_od(double n, double U, double t, double l, double Om, double U_) {
        double r19400 = n;
        double r19401 = 1.5063727889175555e-275;
        bool r19402 = r19400 <= r19401;
        double r19403 = 2.0;
        double r19404 = r19403 * r19400;
        double r19405 = U;
        double r19406 = t;
        double r19407 = l;
        double r19408 = Om;
        double r19409 = r19408 / r19407;
        double r19410 = r19407 / r19409;
        double r19411 = r19403 * r19410;
        double r19412 = r19406 - r19411;
        double r19413 = r19407 / r19408;
        double r19414 = r19413 * r19413;
        double r19415 = r19400 * r19414;
        double r19416 = U_;
        double r19417 = r19405 - r19416;
        double r19418 = r19415 * r19417;
        double r19419 = r19412 - r19418;
        double r19420 = cbrt(r19419);
        double r19421 = r19420 * (r19420 * r19420);
        double r19422 = r19405 * r19421;
        double r19423 = r19404 * r19422;
        double r19424 = sqrt(r19423);
        double r19425 = sqrt(r19404);
        double r19426 = r19405 * r19419;
        double r19427 = sqrt(r19426);
        double r19428 = r19425 * r19427;
        double r19429 = r19402 ? r19424 : r19428;
        return r19429;
}

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 r19430, r19431, r19432, r19433, r19434, r19435, r19436, r19437, r19438, r19439, r19440, r19441, r19442, r19443, r19444, r19445, r19446, r19447, r19448, r19449, r19450;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r19430, "2", 10, MPFR_RNDN);
        mpfr_init(r19431);
        mpfr_init(r19432);
        mpfr_init(r19433);
        mpfr_init(r19434);
        mpfr_init(r19435);
        mpfr_init(r19436);
        mpfr_init(r19437);
        mpfr_init(r19438);
        mpfr_init(r19439);
        mpfr_init(r19440);
        mpfr_init(r19441);
        mpfr_init(r19442);
        mpfr_init(r19443);
        mpfr_init(r19444);
        mpfr_init(r19445);
        mpfr_init(r19446);
        mpfr_init(r19447);
        mpfr_init(r19448);
        mpfr_init(r19449);
        mpfr_init(r19450);
}

double f_im(double n, double U, double t, double l, double Om, double U_) {
        ;
        mpfr_set_d(r19431, n, MPFR_RNDN);
        mpfr_mul(r19432, r19430, r19431, MPFR_RNDN);
        mpfr_set_d(r19433, U, MPFR_RNDN);
        mpfr_mul(r19434, r19432, r19433, MPFR_RNDN);
        mpfr_set_d(r19435, t, MPFR_RNDN);
        mpfr_set_d(r19436, l, MPFR_RNDN);
        mpfr_sqr(r19437, r19436, MPFR_RNDN);
        mpfr_set_d(r19438, Om, MPFR_RNDN);
        mpfr_div(r19439, r19437, r19438, MPFR_RNDN);
        mpfr_mul(r19440, r19430, r19439, MPFR_RNDN);
        mpfr_sub(r19441, r19435, r19440, MPFR_RNDN);
        mpfr_div(r19442, r19436, r19438, MPFR_RNDN);
        mpfr_sqr(r19443, r19442, MPFR_RNDN);
        mpfr_mul(r19444, r19431, r19443, MPFR_RNDN);
        mpfr_set_d(r19445, U_, MPFR_RNDN);
        mpfr_sub(r19446, r19433, r19445, MPFR_RNDN);
        mpfr_mul(r19447, r19444, r19446, MPFR_RNDN);
        mpfr_sub(r19448, r19441, r19447, MPFR_RNDN);
        mpfr_mul(r19449, r19434, r19448, MPFR_RNDN);
        mpfr_sqrt(r19450, r19449, MPFR_RNDN);
        return mpfr_get_d(r19450, MPFR_RNDN);
}

static mpfr_t r19451, r19452, r19453, r19454, r19455, r19456, r19457, r19458, r19459, r19460, r19461, r19462, r19463, r19464, r19465, r19466, r19467, r19468, r19469, r19470, r19471, r19472, r19473, r19474, r19475, r19476, r19477, r19478, r19479, r19480;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r19451);
        mpfr_init_set_str(r19452, "1.5063727889175555e-275", 10, MPFR_RNDN);
        mpfr_init(r19453);
        mpfr_init_set_str(r19454, "2", 10, MPFR_RNDN);
        mpfr_init(r19455);
        mpfr_init(r19456);
        mpfr_init(r19457);
        mpfr_init(r19458);
        mpfr_init(r19459);
        mpfr_init(r19460);
        mpfr_init(r19461);
        mpfr_init(r19462);
        mpfr_init(r19463);
        mpfr_init(r19464);
        mpfr_init(r19465);
        mpfr_init(r19466);
        mpfr_init(r19467);
        mpfr_init(r19468);
        mpfr_init(r19469);
        mpfr_init(r19470);
        mpfr_init(r19471);
        mpfr_init(r19472);
        mpfr_init(r19473);
        mpfr_init(r19474);
        mpfr_init(r19475);
        mpfr_init(r19476);
        mpfr_init(r19477);
        mpfr_init(r19478);
        mpfr_init(r19479);
        mpfr_init(r19480);
}

double f_fm(double n, double U, double t, double l, double Om, double U_) {
        mpfr_set_d(r19451, n, MPFR_RNDN);
        ;
        mpfr_set_si(r19453, mpfr_cmp(r19451, r19452) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r19455, r19454, r19451, MPFR_RNDN);
        mpfr_set_d(r19456, U, MPFR_RNDN);
        mpfr_set_d(r19457, t, MPFR_RNDN);
        mpfr_set_d(r19458, l, MPFR_RNDN);
        mpfr_set_d(r19459, Om, MPFR_RNDN);
        mpfr_div(r19460, r19459, r19458, MPFR_RNDN);
        mpfr_div(r19461, r19458, r19460, MPFR_RNDN);
        mpfr_mul(r19462, r19454, r19461, MPFR_RNDN);
        mpfr_sub(r19463, r19457, r19462, MPFR_RNDN);
        mpfr_div(r19464, r19458, r19459, MPFR_RNDN);
        mpfr_sqr(r19465, r19464, MPFR_RNDN);
        mpfr_mul(r19466, r19451, r19465, MPFR_RNDN);
        mpfr_set_d(r19467, U_, MPFR_RNDN);
        mpfr_sub(r19468, r19456, r19467, MPFR_RNDN);
        mpfr_mul(r19469, r19466, r19468, MPFR_RNDN);
        mpfr_sub(r19470, r19463, r19469, MPFR_RNDN);
        mpfr_cbrt(r19471, r19470, MPFR_RNDN);
        mpfr_mul(r19472, r19471, r19471, MPFR_RNDN); mpfr_mul(r19472, r19472, r19471, MPFR_RNDN);
        mpfr_mul(r19473, r19456, r19472, MPFR_RNDN);
        mpfr_mul(r19474, r19455, r19473, MPFR_RNDN);
        mpfr_sqrt(r19475, r19474, MPFR_RNDN);
        mpfr_sqrt(r19476, r19455, MPFR_RNDN);
        mpfr_mul(r19477, r19456, r19470, MPFR_RNDN);
        mpfr_sqrt(r19478, r19477, MPFR_RNDN);
        mpfr_mul(r19479, r19476, r19478, MPFR_RNDN);
        if (mpfr_get_si(r19453, MPFR_RNDN)) { mpfr_set(r19480, r19475, MPFR_RNDN); } else { mpfr_set(r19480, r19479, MPFR_RNDN); };
        return mpfr_get_d(r19480, MPFR_RNDN);
}

static mpfr_t r19481, r19482, r19483, r19484, r19485, r19486, r19487, r19488, r19489, r19490, r19491, r19492, r19493, r19494, r19495, r19496, r19497, r19498, r19499, r19500, r19501, r19502, r19503, r19504, r19505, r19506, r19507, r19508, r19509, r19510;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r19481);
        mpfr_init_set_str(r19482, "1.5063727889175555e-275", 10, MPFR_RNDN);
        mpfr_init(r19483);
        mpfr_init_set_str(r19484, "2", 10, MPFR_RNDN);
        mpfr_init(r19485);
        mpfr_init(r19486);
        mpfr_init(r19487);
        mpfr_init(r19488);
        mpfr_init(r19489);
        mpfr_init(r19490);
        mpfr_init(r19491);
        mpfr_init(r19492);
        mpfr_init(r19493);
        mpfr_init(r19494);
        mpfr_init(r19495);
        mpfr_init(r19496);
        mpfr_init(r19497);
        mpfr_init(r19498);
        mpfr_init(r19499);
        mpfr_init(r19500);
        mpfr_init(r19501);
        mpfr_init(r19502);
        mpfr_init(r19503);
        mpfr_init(r19504);
        mpfr_init(r19505);
        mpfr_init(r19506);
        mpfr_init(r19507);
        mpfr_init(r19508);
        mpfr_init(r19509);
        mpfr_init(r19510);
}

double f_dm(double n, double U, double t, double l, double Om, double U_) {
        mpfr_set_d(r19481, n, MPFR_RNDN);
        ;
        mpfr_set_si(r19483, mpfr_cmp(r19481, r19482) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r19485, r19484, r19481, MPFR_RNDN);
        mpfr_set_d(r19486, U, MPFR_RNDN);
        mpfr_set_d(r19487, t, MPFR_RNDN);
        mpfr_set_d(r19488, l, MPFR_RNDN);
        mpfr_set_d(r19489, Om, MPFR_RNDN);
        mpfr_div(r19490, r19489, r19488, MPFR_RNDN);
        mpfr_div(r19491, r19488, r19490, MPFR_RNDN);
        mpfr_mul(r19492, r19484, r19491, MPFR_RNDN);
        mpfr_sub(r19493, r19487, r19492, MPFR_RNDN);
        mpfr_div(r19494, r19488, r19489, MPFR_RNDN);
        mpfr_sqr(r19495, r19494, MPFR_RNDN);
        mpfr_mul(r19496, r19481, r19495, MPFR_RNDN);
        mpfr_set_d(r19497, U_, MPFR_RNDN);
        mpfr_sub(r19498, r19486, r19497, MPFR_RNDN);
        mpfr_mul(r19499, r19496, r19498, MPFR_RNDN);
        mpfr_sub(r19500, r19493, r19499, MPFR_RNDN);
        mpfr_cbrt(r19501, r19500, MPFR_RNDN);
        mpfr_mul(r19502, r19501, r19501, MPFR_RNDN); mpfr_mul(r19502, r19502, r19501, MPFR_RNDN);
        mpfr_mul(r19503, r19486, r19502, MPFR_RNDN);
        mpfr_mul(r19504, r19485, r19503, MPFR_RNDN);
        mpfr_sqrt(r19505, r19504, MPFR_RNDN);
        mpfr_sqrt(r19506, r19485, MPFR_RNDN);
        mpfr_mul(r19507, r19486, r19500, MPFR_RNDN);
        mpfr_sqrt(r19508, r19507, MPFR_RNDN);
        mpfr_mul(r19509, r19506, r19508, MPFR_RNDN);
        if (mpfr_get_si(r19483, MPFR_RNDN)) { mpfr_set(r19510, r19505, MPFR_RNDN); } else { mpfr_set(r19510, r19509, MPFR_RNDN); };
        return mpfr_get_d(r19510, MPFR_RNDN);
}

