#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 r8474 = 2.0f;
        float r8475 = n;
        float r8476 = r8474 * r8475;
        float r8477 = U;
        float r8478 = r8476 * r8477;
        float r8479 = t;
        float r8480 = l;
        float r8481 = r8480 * r8480;
        float r8482 = Om;
        float r8483 = r8481 / r8482;
        float r8484 = r8474 * r8483;
        float r8485 = r8479 - r8484;
        float r8486 = r8480 / r8482;
        float r8487 = pow(r8486, r8474);
        float r8488 = r8475 * r8487;
        float r8489 = U_;
        float r8490 = r8477 - r8489;
        float r8491 = r8488 * r8490;
        float r8492 = r8485 - r8491;
        float r8493 = r8478 * r8492;
        float r8494 = sqrt(r8493);
        return r8494;
}

double f_id(double n, double U, double t, double l, double Om, double U_) {
        double r8495 = 2.0;
        double r8496 = n;
        double r8497 = r8495 * r8496;
        double r8498 = U;
        double r8499 = r8497 * r8498;
        double r8500 = t;
        double r8501 = l;
        double r8502 = r8501 * r8501;
        double r8503 = Om;
        double r8504 = r8502 / r8503;
        double r8505 = r8495 * r8504;
        double r8506 = r8500 - r8505;
        double r8507 = r8501 / r8503;
        double r8508 = pow(r8507, r8495);
        double r8509 = r8496 * r8508;
        double r8510 = U_;
        double r8511 = r8498 - r8510;
        double r8512 = r8509 * r8511;
        double r8513 = r8506 - r8512;
        double r8514 = r8499 * r8513;
        double r8515 = sqrt(r8514);
        return r8515;
}


double f_of(float n, float U, float t, float l, float Om, float U_) {
        float r8516 = n;
        float r8517 = U;
        float r8518 = r8516 * r8517;
        float r8519 = 2.0f;
        float r8520 = r8518 * r8519;
        float r8521 = sqrt(r8520);
        float r8522 = t;
        float r8523 = l;
        float r8524 = Om;
        float r8525 = r8523 / r8524;
        float r8526 = r8525 * r8525;
        float r8527 = U_;
        float r8528 = r8517 - r8527;
        float r8529 = r8516 * r8528;
        float r8530 = r8523 * r8519;
        float r8531 = r8530 * r8525;
        float r8532 = fma(r8526, r8529, r8531);
        float r8533 = r8522 - r8532;
        float r8534 = sqrt(r8533);
        float r8535 = r8521 * r8534;
        float r8536 = 1.7922553581745162e-234f;
        bool r8537 = r8535 <= r8536;
        float r8538 = r8516 * r8525;
        float r8539 = fma(r8528, r8538, r8530);
        float r8540 = r8519 * r8517;
        float r8541 = -r8540;
        float r8542 = r8541 * r8538;
        float r8543 = r8522 * r8517;
        float r8544 = r8519 * r8516;
        float r8545 = r8543 * r8544;
        float r8546 = fma(r8539, r8542, r8545);
        float r8547 = 0.5f;
        float r8548 = pow(r8546, r8547);
        float r8549 = 3.345971184085273e+259f;
        bool r8550 = r8535 <= r8549;
        float r8551 = r8550 ? r8535 : r8548;
        float r8552 = r8537 ? r8548 : r8551;
        return r8552;
}

double f_od(double n, double U, double t, double l, double Om, double U_) {
        double r8553 = n;
        double r8554 = U;
        double r8555 = r8553 * r8554;
        double r8556 = 2.0;
        double r8557 = r8555 * r8556;
        double r8558 = sqrt(r8557);
        double r8559 = t;
        double r8560 = l;
        double r8561 = Om;
        double r8562 = r8560 / r8561;
        double r8563 = r8562 * r8562;
        double r8564 = U_;
        double r8565 = r8554 - r8564;
        double r8566 = r8553 * r8565;
        double r8567 = r8560 * r8556;
        double r8568 = r8567 * r8562;
        double r8569 = fma(r8563, r8566, r8568);
        double r8570 = r8559 - r8569;
        double r8571 = sqrt(r8570);
        double r8572 = r8558 * r8571;
        double r8573 = 1.7922553581745162e-234;
        bool r8574 = r8572 <= r8573;
        double r8575 = r8553 * r8562;
        double r8576 = fma(r8565, r8575, r8567);
        double r8577 = r8556 * r8554;
        double r8578 = -r8577;
        double r8579 = r8578 * r8575;
        double r8580 = r8559 * r8554;
        double r8581 = r8556 * r8553;
        double r8582 = r8580 * r8581;
        double r8583 = fma(r8576, r8579, r8582);
        double r8584 = 0.5;
        double r8585 = pow(r8583, r8584);
        double r8586 = 3.345971184085273e+259;
        bool r8587 = r8572 <= r8586;
        double r8588 = r8587 ? r8572 : r8585;
        double r8589 = r8574 ? r8585 : r8588;
        return r8589;
}

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 r8590, r8591, r8592, r8593, r8594, r8595, r8596, r8597, r8598, r8599, r8600, r8601, r8602, r8603, r8604, r8605, r8606, r8607, r8608, r8609, r8610;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8590, "2", 10, MPFR_RNDN);
        mpfr_init(r8591);
        mpfr_init(r8592);
        mpfr_init(r8593);
        mpfr_init(r8594);
        mpfr_init(r8595);
        mpfr_init(r8596);
        mpfr_init(r8597);
        mpfr_init(r8598);
        mpfr_init(r8599);
        mpfr_init(r8600);
        mpfr_init(r8601);
        mpfr_init(r8602);
        mpfr_init(r8603);
        mpfr_init(r8604);
        mpfr_init(r8605);
        mpfr_init(r8606);
        mpfr_init(r8607);
        mpfr_init(r8608);
        mpfr_init(r8609);
        mpfr_init(r8610);
}

double f_im(double n, double U, double t, double l, double Om, double U_) {
        ;
        mpfr_set_d(r8591, n, MPFR_RNDN);
        mpfr_mul(r8592, r8590, r8591, MPFR_RNDN);
        mpfr_set_d(r8593, U, MPFR_RNDN);
        mpfr_mul(r8594, r8592, r8593, MPFR_RNDN);
        mpfr_set_d(r8595, t, MPFR_RNDN);
        mpfr_set_d(r8596, l, MPFR_RNDN);
        mpfr_mul(r8597, r8596, r8596, MPFR_RNDN);
        mpfr_set_d(r8598, Om, MPFR_RNDN);
        mpfr_div(r8599, r8597, r8598, MPFR_RNDN);
        mpfr_mul(r8600, r8590, r8599, MPFR_RNDN);
        mpfr_sub(r8601, r8595, r8600, MPFR_RNDN);
        mpfr_div(r8602, r8596, r8598, MPFR_RNDN);
        mpfr_pow(r8603, r8602, r8590, MPFR_RNDN);
        mpfr_mul(r8604, r8591, r8603, MPFR_RNDN);
        mpfr_set_d(r8605, U_, MPFR_RNDN);
        mpfr_sub(r8606, r8593, r8605, MPFR_RNDN);
        mpfr_mul(r8607, r8604, r8606, MPFR_RNDN);
        mpfr_sub(r8608, r8601, r8607, MPFR_RNDN);
        mpfr_mul(r8609, r8594, r8608, MPFR_RNDN);
        mpfr_sqrt(r8610, r8609, MPFR_RNDN);
        return mpfr_get_d(r8610, MPFR_RNDN);
}

static mpfr_t r8611, r8612, r8613, r8614, r8615, r8616, r8617, r8618, r8619, r8620, r8621, r8622, r8623, r8624, r8625, r8626, r8627, r8628, r8629, r8630, r8631, r8632, r8633, r8634, r8635, r8636, r8637, r8638, r8639, r8640, r8641, r8642, r8643, r8644, r8645, r8646, r8647;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8611);
        mpfr_init(r8612);
        mpfr_init(r8613);
        mpfr_init_set_str(r8614, "2", 10, MPFR_RNDN);
        mpfr_init(r8615);
        mpfr_init(r8616);
        mpfr_init(r8617);
        mpfr_init(r8618);
        mpfr_init(r8619);
        mpfr_init(r8620);
        mpfr_init(r8621);
        mpfr_init(r8622);
        mpfr_init(r8623);
        mpfr_init(r8624);
        mpfr_init(r8625);
        mpfr_init(r8626);
        mpfr_init(r8627);
        mpfr_init(r8628);
        mpfr_init(r8629);
        mpfr_init(r8630);
        mpfr_init_set_str(r8631, "1.7922553581745162e-234", 10, MPFR_RNDN);
        mpfr_init(r8632);
        mpfr_init(r8633);
        mpfr_init(r8634);
        mpfr_init(r8635);
        mpfr_init(r8636);
        mpfr_init(r8637);
        mpfr_init(r8638);
        mpfr_init(r8639);
        mpfr_init(r8640);
        mpfr_init(r8641);
        mpfr_init_set_str(r8642, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8643);
        mpfr_init_set_str(r8644, "3.345971184085273e+259", 10, MPFR_RNDN);
        mpfr_init(r8645);
        mpfr_init(r8646);
        mpfr_init(r8647);
}

double f_fm(double n, double U, double t, double l, double Om, double U_) {
        mpfr_set_d(r8611, n, MPFR_RNDN);
        mpfr_set_d(r8612, U, MPFR_RNDN);
        mpfr_mul(r8613, r8611, r8612, MPFR_RNDN);
        ;
        mpfr_mul(r8615, r8613, r8614, MPFR_RNDN);
        mpfr_sqrt(r8616, r8615, MPFR_RNDN);
        mpfr_set_d(r8617, t, MPFR_RNDN);
        mpfr_set_d(r8618, l, MPFR_RNDN);
        mpfr_set_d(r8619, Om, MPFR_RNDN);
        mpfr_div(r8620, r8618, r8619, MPFR_RNDN);
        mpfr_mul(r8621, r8620, r8620, MPFR_RNDN);
        mpfr_set_d(r8622, U_, MPFR_RNDN);
        mpfr_sub(r8623, r8612, r8622, MPFR_RNDN);
        mpfr_mul(r8624, r8611, r8623, MPFR_RNDN);
        mpfr_mul(r8625, r8618, r8614, MPFR_RNDN);
        mpfr_mul(r8626, r8625, r8620, MPFR_RNDN);
        mpfr_fma(r8627, r8621, r8624, r8626, MPFR_RNDN);
        mpfr_sub(r8628, r8617, r8627, MPFR_RNDN);
        mpfr_sqrt(r8629, r8628, MPFR_RNDN);
        mpfr_mul(r8630, r8616, r8629, MPFR_RNDN);
        ;
        mpfr_set_si(r8632, mpfr_cmp(r8630, r8631) <= 0, MPFR_RNDN);
        mpfr_mul(r8633, r8611, r8620, MPFR_RNDN);
        mpfr_fma(r8634, r8623, r8633, r8625, MPFR_RNDN);
        mpfr_mul(r8635, r8614, r8612, MPFR_RNDN);
        mpfr_neg(r8636, r8635, MPFR_RNDN);
        mpfr_mul(r8637, r8636, r8633, MPFR_RNDN);
        mpfr_mul(r8638, r8617, r8612, MPFR_RNDN);
        mpfr_mul(r8639, r8614, r8611, MPFR_RNDN);
        mpfr_mul(r8640, r8638, r8639, MPFR_RNDN);
        mpfr_fma(r8641, r8634, r8637, r8640, MPFR_RNDN);
        ;
        mpfr_pow(r8643, r8641, r8642, MPFR_RNDN);
        ;
        mpfr_set_si(r8645, mpfr_cmp(r8630, r8644) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r8645, MPFR_RNDN)) { mpfr_set(r8646, r8630, MPFR_RNDN); } else { mpfr_set(r8646, r8643, MPFR_RNDN); };
        if (mpfr_get_si(r8632, MPFR_RNDN)) { mpfr_set(r8647, r8643, MPFR_RNDN); } else { mpfr_set(r8647, r8646, MPFR_RNDN); };
        return mpfr_get_d(r8647, MPFR_RNDN);
}

static mpfr_t r8648, r8649, r8650, r8651, r8652, r8653, r8654, r8655, r8656, r8657, r8658, r8659, r8660, r8661, r8662, r8663, r8664, r8665, r8666, r8667, r8668, r8669, r8670, r8671, r8672, r8673, r8674, r8675, r8676, r8677, r8678, r8679, r8680, r8681, r8682, r8683, r8684;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8648);
        mpfr_init(r8649);
        mpfr_init(r8650);
        mpfr_init_set_str(r8651, "2", 10, MPFR_RNDN);
        mpfr_init(r8652);
        mpfr_init(r8653);
        mpfr_init(r8654);
        mpfr_init(r8655);
        mpfr_init(r8656);
        mpfr_init(r8657);
        mpfr_init(r8658);
        mpfr_init(r8659);
        mpfr_init(r8660);
        mpfr_init(r8661);
        mpfr_init(r8662);
        mpfr_init(r8663);
        mpfr_init(r8664);
        mpfr_init(r8665);
        mpfr_init(r8666);
        mpfr_init(r8667);
        mpfr_init_set_str(r8668, "1.7922553581745162e-234", 10, MPFR_RNDN);
        mpfr_init(r8669);
        mpfr_init(r8670);
        mpfr_init(r8671);
        mpfr_init(r8672);
        mpfr_init(r8673);
        mpfr_init(r8674);
        mpfr_init(r8675);
        mpfr_init(r8676);
        mpfr_init(r8677);
        mpfr_init(r8678);
        mpfr_init_set_str(r8679, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8680);
        mpfr_init_set_str(r8681, "3.345971184085273e+259", 10, MPFR_RNDN);
        mpfr_init(r8682);
        mpfr_init(r8683);
        mpfr_init(r8684);
}

double f_dm(double n, double U, double t, double l, double Om, double U_) {
        mpfr_set_d(r8648, n, MPFR_RNDN);
        mpfr_set_d(r8649, U, MPFR_RNDN);
        mpfr_mul(r8650, r8648, r8649, MPFR_RNDN);
        ;
        mpfr_mul(r8652, r8650, r8651, MPFR_RNDN);
        mpfr_sqrt(r8653, r8652, MPFR_RNDN);
        mpfr_set_d(r8654, t, MPFR_RNDN);
        mpfr_set_d(r8655, l, MPFR_RNDN);
        mpfr_set_d(r8656, Om, MPFR_RNDN);
        mpfr_div(r8657, r8655, r8656, MPFR_RNDN);
        mpfr_mul(r8658, r8657, r8657, MPFR_RNDN);
        mpfr_set_d(r8659, U_, MPFR_RNDN);
        mpfr_sub(r8660, r8649, r8659, MPFR_RNDN);
        mpfr_mul(r8661, r8648, r8660, MPFR_RNDN);
        mpfr_mul(r8662, r8655, r8651, MPFR_RNDN);
        mpfr_mul(r8663, r8662, r8657, MPFR_RNDN);
        mpfr_fma(r8664, r8658, r8661, r8663, MPFR_RNDN);
        mpfr_sub(r8665, r8654, r8664, MPFR_RNDN);
        mpfr_sqrt(r8666, r8665, MPFR_RNDN);
        mpfr_mul(r8667, r8653, r8666, MPFR_RNDN);
        ;
        mpfr_set_si(r8669, mpfr_cmp(r8667, r8668) <= 0, MPFR_RNDN);
        mpfr_mul(r8670, r8648, r8657, MPFR_RNDN);
        mpfr_fma(r8671, r8660, r8670, r8662, MPFR_RNDN);
        mpfr_mul(r8672, r8651, r8649, MPFR_RNDN);
        mpfr_neg(r8673, r8672, MPFR_RNDN);
        mpfr_mul(r8674, r8673, r8670, MPFR_RNDN);
        mpfr_mul(r8675, r8654, r8649, MPFR_RNDN);
        mpfr_mul(r8676, r8651, r8648, MPFR_RNDN);
        mpfr_mul(r8677, r8675, r8676, MPFR_RNDN);
        mpfr_fma(r8678, r8671, r8674, r8677, MPFR_RNDN);
        ;
        mpfr_pow(r8680, r8678, r8679, MPFR_RNDN);
        ;
        mpfr_set_si(r8682, mpfr_cmp(r8667, r8681) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r8682, MPFR_RNDN)) { mpfr_set(r8683, r8667, MPFR_RNDN); } else { mpfr_set(r8683, r8680, MPFR_RNDN); };
        if (mpfr_get_si(r8669, MPFR_RNDN)) { mpfr_set(r8684, r8680, MPFR_RNDN); } else { mpfr_set(r8684, r8683, MPFR_RNDN); };
        return mpfr_get_d(r8684, MPFR_RNDN);
}

