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

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


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

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

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

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8593, "2", 10, MPFR_RNDN);
        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);
        mpfr_init(r8611);
        mpfr_init(r8612);
        mpfr_init(r8613);
}

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

static mpfr_t 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, r8648, r8649, r8650;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8614);
        mpfr_init(r8615);
        mpfr_init(r8616);
        mpfr_init_set_str(r8617, "2", 10, MPFR_RNDN);
        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(r8631);
        mpfr_init(r8632);
        mpfr_init(r8633);
        mpfr_init_set_str(r8634, "1.7922553581745162e-234", 10, MPFR_RNDN);
        mpfr_init(r8635);
        mpfr_init(r8636);
        mpfr_init(r8637);
        mpfr_init(r8638);
        mpfr_init(r8639);
        mpfr_init(r8640);
        mpfr_init(r8641);
        mpfr_init(r8642);
        mpfr_init(r8643);
        mpfr_init(r8644);
        mpfr_init_set_str(r8645, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8646);
        mpfr_init_set_str(r8647, "3.345971184085273e+259", 10, MPFR_RNDN);
        mpfr_init(r8648);
        mpfr_init(r8649);
        mpfr_init(r8650);
}

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

static mpfr_t 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, r8685, r8686, r8687;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8651);
        mpfr_init(r8652);
        mpfr_init(r8653);
        mpfr_init_set_str(r8654, "2", 10, MPFR_RNDN);
        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(r8668);
        mpfr_init(r8669);
        mpfr_init(r8670);
        mpfr_init_set_str(r8671, "1.7922553581745162e-234", 10, MPFR_RNDN);
        mpfr_init(r8672);
        mpfr_init(r8673);
        mpfr_init(r8674);
        mpfr_init(r8675);
        mpfr_init(r8676);
        mpfr_init(r8677);
        mpfr_init(r8678);
        mpfr_init(r8679);
        mpfr_init(r8680);
        mpfr_init(r8681);
        mpfr_init_set_str(r8682, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8683);
        mpfr_init_set_str(r8684, "3.345971184085273e+259", 10, MPFR_RNDN);
        mpfr_init(r8685);
        mpfr_init(r8686);
        mpfr_init(r8687);
}

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

