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

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


double f_of(float n, float U, float t, float l, float Om, float U_) {
        float r8522 = n;
        float r8523 = U;
        float r8524 = U_;
        float r8525 = r8523 - r8524;
        float r8526 = l;
        float r8527 = Om;
        float r8528 = r8526 / r8527;
        float r8529 = r8525 * r8528;
        float r8530 = 2.0f;
        float r8531 = r8526 * r8530;
        float r8532 = fma(r8522, r8529, r8531);
        float r8533 = r8522 * r8530;
        float r8534 = r8523 * r8533;
        float r8535 = -r8528;
        float r8536 = r8534 * r8535;
        float r8537 = t;
        float r8538 = r8537 * r8530;
        float r8539 = r8522 * r8523;
        float r8540 = r8538 * r8539;
        float r8541 = fma(r8532, r8536, r8540);
        float r8542 = 1.0770963626450554e-301f;
        bool r8543 = r8541 <= r8542;
        float r8544 = -r8530;
        float r8545 = r8522 * r8544;
        float r8546 = r8528 * r8523;
        float r8547 = r8545 * r8546;
        float r8548 = r8538 * r8523;
        float r8549 = r8522 * r8548;
        float r8550 = fma(r8532, r8547, r8549);
        float r8551 = 0.5f;
        float r8552 = pow(r8550, r8551);
        float r8553 = fabs(r8552);
        float r8554 = 2.0685079534963795e+307f;
        bool r8555 = r8541 <= r8554;
        float r8556 = sqrt(r8541);
        float r8557 = fabs(r8556);
        float r8558 = r8528 * r8528;
        float r8559 = r8525 * r8522;
        float r8560 = r8531 * r8528;
        float r8561 = fma(r8558, r8559, r8560);
        float r8562 = r8537 - r8561;
        float r8563 = sqrt(r8562);
        float r8564 = r8530 * r8539;
        float r8565 = sqrt(r8564);
        float r8566 = r8563 * r8565;
        float r8567 = r8555 ? r8557 : r8566;
        float r8568 = r8543 ? r8553 : r8567;
        return r8568;
}

double f_od(double n, double U, double t, double l, double Om, double U_) {
        double r8569 = n;
        double r8570 = U;
        double r8571 = U_;
        double r8572 = r8570 - r8571;
        double r8573 = l;
        double r8574 = Om;
        double r8575 = r8573 / r8574;
        double r8576 = r8572 * r8575;
        double r8577 = 2.0;
        double r8578 = r8573 * r8577;
        double r8579 = fma(r8569, r8576, r8578);
        double r8580 = r8569 * r8577;
        double r8581 = r8570 * r8580;
        double r8582 = -r8575;
        double r8583 = r8581 * r8582;
        double r8584 = t;
        double r8585 = r8584 * r8577;
        double r8586 = r8569 * r8570;
        double r8587 = r8585 * r8586;
        double r8588 = fma(r8579, r8583, r8587);
        double r8589 = 1.0770963626450554e-301;
        bool r8590 = r8588 <= r8589;
        double r8591 = -r8577;
        double r8592 = r8569 * r8591;
        double r8593 = r8575 * r8570;
        double r8594 = r8592 * r8593;
        double r8595 = r8585 * r8570;
        double r8596 = r8569 * r8595;
        double r8597 = fma(r8579, r8594, r8596);
        double r8598 = 0.5;
        double r8599 = pow(r8597, r8598);
        double r8600 = fabs(r8599);
        double r8601 = 2.0685079534963795e+307;
        bool r8602 = r8588 <= r8601;
        double r8603 = sqrt(r8588);
        double r8604 = fabs(r8603);
        double r8605 = r8575 * r8575;
        double r8606 = r8572 * r8569;
        double r8607 = r8578 * r8575;
        double r8608 = fma(r8605, r8606, r8607);
        double r8609 = r8584 - r8608;
        double r8610 = sqrt(r8609);
        double r8611 = r8577 * r8586;
        double r8612 = sqrt(r8611);
        double r8613 = r8610 * r8612;
        double r8614 = r8602 ? r8604 : r8613;
        double r8615 = r8590 ? r8600 : r8614;
        return r8615;
}

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 r8616, r8617, r8618, r8619, r8620, r8621, r8622, r8623, r8624, r8625, r8626, r8627, r8628, r8629, r8630, r8631, r8632, r8633, r8634, r8635, r8636;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8616, "2", 10, MPFR_RNDN);
        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(r8631);
        mpfr_init(r8632);
        mpfr_init(r8633);
        mpfr_init(r8634);
        mpfr_init(r8635);
        mpfr_init(r8636);
}

double f_im(double n, double U, double t, double l, double Om, double U_) {
        ;
        mpfr_set_d(r8617, n, MPFR_RNDN);
        mpfr_mul(r8618, r8616, r8617, MPFR_RNDN);
        mpfr_set_d(r8619, U, MPFR_RNDN);
        mpfr_mul(r8620, r8618, r8619, MPFR_RNDN);
        mpfr_set_d(r8621, t, MPFR_RNDN);
        mpfr_set_d(r8622, l, MPFR_RNDN);
        mpfr_mul(r8623, r8622, r8622, MPFR_RNDN);
        mpfr_set_d(r8624, Om, MPFR_RNDN);
        mpfr_div(r8625, r8623, r8624, MPFR_RNDN);
        mpfr_mul(r8626, r8616, r8625, MPFR_RNDN);
        mpfr_sub(r8627, r8621, r8626, MPFR_RNDN);
        mpfr_div(r8628, r8622, r8624, MPFR_RNDN);
        mpfr_pow(r8629, r8628, r8616, MPFR_RNDN);
        mpfr_mul(r8630, r8617, r8629, MPFR_RNDN);
        mpfr_set_d(r8631, U_, MPFR_RNDN);
        mpfr_sub(r8632, r8619, r8631, MPFR_RNDN);
        mpfr_mul(r8633, r8630, r8632, MPFR_RNDN);
        mpfr_sub(r8634, r8627, r8633, MPFR_RNDN);
        mpfr_mul(r8635, r8620, r8634, MPFR_RNDN);
        mpfr_sqrt(r8636, r8635, MPFR_RNDN);
        return mpfr_get_d(r8636, MPFR_RNDN);
}

static mpfr_t r8637, r8638, r8639, r8640, r8641, r8642, r8643, r8644, r8645, r8646, r8647, 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;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        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, "2", 10, MPFR_RNDN);
        mpfr_init(r8646);
        mpfr_init(r8647);
        mpfr_init(r8648);
        mpfr_init(r8649);
        mpfr_init(r8650);
        mpfr_init(r8651);
        mpfr_init(r8652);
        mpfr_init(r8653);
        mpfr_init(r8654);
        mpfr_init(r8655);
        mpfr_init(r8656);
        mpfr_init_set_str(r8657, "1.0770963626450554e-301", 10, MPFR_RNDN);
        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_set_str(r8666, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8667);
        mpfr_init(r8668);
        mpfr_init_set_str(r8669, "2.0685079534963795e+307", 10, MPFR_RNDN);
        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(r8679);
        mpfr_init(r8680);
        mpfr_init(r8681);
        mpfr_init(r8682);
        mpfr_init(r8683);
}

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

static mpfr_t r8684, r8685, r8686, r8687, r8688, r8689, r8690, r8691, r8692, r8693, r8694, r8695, r8696, r8697, r8698, r8699, r8700, r8701, r8702, r8703, r8704, r8705, r8706, r8707, r8708, r8709, r8710, r8711, r8712, r8713, r8714, r8715, r8716, r8717, r8718, r8719, r8720, r8721, r8722, r8723, r8724, r8725, r8726, r8727, r8728, r8729, r8730;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8684);
        mpfr_init(r8685);
        mpfr_init(r8686);
        mpfr_init(r8687);
        mpfr_init(r8688);
        mpfr_init(r8689);
        mpfr_init(r8690);
        mpfr_init(r8691);
        mpfr_init_set_str(r8692, "2", 10, MPFR_RNDN);
        mpfr_init(r8693);
        mpfr_init(r8694);
        mpfr_init(r8695);
        mpfr_init(r8696);
        mpfr_init(r8697);
        mpfr_init(r8698);
        mpfr_init(r8699);
        mpfr_init(r8700);
        mpfr_init(r8701);
        mpfr_init(r8702);
        mpfr_init(r8703);
        mpfr_init_set_str(r8704, "1.0770963626450554e-301", 10, MPFR_RNDN);
        mpfr_init(r8705);
        mpfr_init(r8706);
        mpfr_init(r8707);
        mpfr_init(r8708);
        mpfr_init(r8709);
        mpfr_init(r8710);
        mpfr_init(r8711);
        mpfr_init(r8712);
        mpfr_init_set_str(r8713, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8714);
        mpfr_init(r8715);
        mpfr_init_set_str(r8716, "2.0685079534963795e+307", 10, MPFR_RNDN);
        mpfr_init(r8717);
        mpfr_init(r8718);
        mpfr_init(r8719);
        mpfr_init(r8720);
        mpfr_init(r8721);
        mpfr_init(r8722);
        mpfr_init(r8723);
        mpfr_init(r8724);
        mpfr_init(r8725);
        mpfr_init(r8726);
        mpfr_init(r8727);
        mpfr_init(r8728);
        mpfr_init(r8729);
        mpfr_init(r8730);
}

double f_dm(double n, double U, double t, double l, double Om, double U_) {
        mpfr_set_d(r8684, n, MPFR_RNDN);
        mpfr_set_d(r8685, U, MPFR_RNDN);
        mpfr_set_d(r8686, U_, MPFR_RNDN);
        mpfr_sub(r8687, r8685, r8686, MPFR_RNDN);
        mpfr_set_d(r8688, l, MPFR_RNDN);
        mpfr_set_d(r8689, Om, MPFR_RNDN);
        mpfr_div(r8690, r8688, r8689, MPFR_RNDN);
        mpfr_mul(r8691, r8687, r8690, MPFR_RNDN);
        ;
        mpfr_mul(r8693, r8688, r8692, MPFR_RNDN);
        mpfr_fma(r8694, r8684, r8691, r8693, MPFR_RNDN);
        mpfr_mul(r8695, r8684, r8692, MPFR_RNDN);
        mpfr_mul(r8696, r8685, r8695, MPFR_RNDN);
        mpfr_neg(r8697, r8690, MPFR_RNDN);
        mpfr_mul(r8698, r8696, r8697, MPFR_RNDN);
        mpfr_set_d(r8699, t, MPFR_RNDN);
        mpfr_mul(r8700, r8699, r8692, MPFR_RNDN);
        mpfr_mul(r8701, r8684, r8685, MPFR_RNDN);
        mpfr_mul(r8702, r8700, r8701, MPFR_RNDN);
        mpfr_fma(r8703, r8694, r8698, r8702, MPFR_RNDN);
        ;
        mpfr_set_si(r8705, mpfr_cmp(r8703, r8704) <= 0, MPFR_RNDN);
        mpfr_neg(r8706, r8692, MPFR_RNDN);
        mpfr_mul(r8707, r8684, r8706, MPFR_RNDN);
        mpfr_mul(r8708, r8690, r8685, MPFR_RNDN);
        mpfr_mul(r8709, r8707, r8708, MPFR_RNDN);
        mpfr_mul(r8710, r8700, r8685, MPFR_RNDN);
        mpfr_mul(r8711, r8684, r8710, MPFR_RNDN);
        mpfr_fma(r8712, r8694, r8709, r8711, MPFR_RNDN);
        ;
        mpfr_pow(r8714, r8712, r8713, MPFR_RNDN);
        mpfr_abs(r8715, r8714, MPFR_RNDN);
        ;
        mpfr_set_si(r8717, mpfr_cmp(r8703, r8716) <= 0, MPFR_RNDN);
        mpfr_sqrt(r8718, r8703, MPFR_RNDN);
        mpfr_abs(r8719, r8718, MPFR_RNDN);
        mpfr_mul(r8720, r8690, r8690, MPFR_RNDN);
        mpfr_mul(r8721, r8687, r8684, MPFR_RNDN);
        mpfr_mul(r8722, r8693, r8690, MPFR_RNDN);
        mpfr_fma(r8723, r8720, r8721, r8722, MPFR_RNDN);
        mpfr_sub(r8724, r8699, r8723, MPFR_RNDN);
        mpfr_sqrt(r8725, r8724, MPFR_RNDN);
        mpfr_mul(r8726, r8692, r8701, MPFR_RNDN);
        mpfr_sqrt(r8727, r8726, MPFR_RNDN);
        mpfr_mul(r8728, r8725, r8727, MPFR_RNDN);
        if (mpfr_get_si(r8717, MPFR_RNDN)) { mpfr_set(r8729, r8719, MPFR_RNDN); } else { mpfr_set(r8729, r8728, MPFR_RNDN); };
        if (mpfr_get_si(r8705, MPFR_RNDN)) { mpfr_set(r8730, r8715, MPFR_RNDN); } else { mpfr_set(r8730, r8729, MPFR_RNDN); };
        return mpfr_get_d(r8730, MPFR_RNDN);
}

