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

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

double f_if(float t, float l, float Om, float Omc) {
        float r8577 = 1;
        float r8578 = Om;
        float r8579 = Omc;
        float r8580 = r8578 / r8579;
        float r8581 = 2;
        float r8582 = pow(r8580, r8581);
        float r8583 = r8577 - r8582;
        float r8584 = t;
        float r8585 = l;
        float r8586 = r8584 / r8585;
        float r8587 = pow(r8586, r8581);
        float r8588 = r8581 * r8587;
        float r8589 = r8577 + r8588;
        float r8590 = r8583 / r8589;
        float r8591 = sqrt(r8590);
        float r8592 = asin(r8591);
        return r8592;
}

double f_id(double t, double l, double Om, double Omc) {
        double r8593 = 1;
        double r8594 = Om;
        double r8595 = Omc;
        double r8596 = r8594 / r8595;
        double r8597 = 2;
        double r8598 = pow(r8596, r8597);
        double r8599 = r8593 - r8598;
        double r8600 = t;
        double r8601 = l;
        double r8602 = r8600 / r8601;
        double r8603 = pow(r8602, r8597);
        double r8604 = r8597 * r8603;
        double r8605 = r8593 + r8604;
        double r8606 = r8599 / r8605;
        double r8607 = sqrt(r8606);
        double r8608 = asin(r8607);
        return r8608;
}


double f_of(float t, float l, float Om, float Omc) {
        float r8609 = 1;
        float r8610 = Om;
        float r8611 = Omc;
        float r8612 = r8610 / r8611;
        float r8613 = 2;
        float r8614 = pow(r8612, r8613);
        float r8615 = r8609 - r8614;
        float r8616 = t;
        float r8617 = l;
        float r8618 = r8616 / r8617;
        float r8619 = pow(r8618, r8613);
        float r8620 = r8613 * r8619;
        float r8621 = r8609 + r8620;
        float r8622 = r8615 / r8621;
        float r8623 = sqrt(r8622);
        float r8624 = asin(r8623);
        float r8625 = log1p(r8624);
        float r8626 = expm1(r8625);
        return r8626;
}

double f_od(double t, double l, double Om, double Omc) {
        double r8627 = 1;
        double r8628 = Om;
        double r8629 = Omc;
        double r8630 = r8628 / r8629;
        double r8631 = 2;
        double r8632 = pow(r8630, r8631);
        double r8633 = r8627 - r8632;
        double r8634 = t;
        double r8635 = l;
        double r8636 = r8634 / r8635;
        double r8637 = pow(r8636, r8631);
        double r8638 = r8631 * r8637;
        double r8639 = r8627 + r8638;
        double r8640 = r8633 / r8639;
        double r8641 = sqrt(r8640);
        double r8642 = asin(r8641);
        double r8643 = log1p(r8642);
        double r8644 = expm1(r8643);
        return r8644;
}

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 r8645, r8646, r8647, r8648, r8649, r8650, r8651, r8652, r8653, r8654, r8655, r8656, r8657, r8658, r8659, r8660;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8645, "1", 10, MPFR_RNDN);
        mpfr_init(r8646);
        mpfr_init(r8647);
        mpfr_init(r8648);
        mpfr_init_set_str(r8649, "2", 10, MPFR_RNDN);
        mpfr_init(r8650);
        mpfr_init(r8651);
        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);
}

double f_im(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r8646, Om, MPFR_RNDN);
        mpfr_set_d(r8647, Omc, MPFR_RNDN);
        mpfr_div(r8648, r8646, r8647, MPFR_RNDN);
        ;
        mpfr_pow(r8650, r8648, r8649, MPFR_RNDN);
        mpfr_sub(r8651, r8645, r8650, MPFR_RNDN);
        mpfr_set_d(r8652, t, MPFR_RNDN);
        mpfr_set_d(r8653, l, MPFR_RNDN);
        mpfr_div(r8654, r8652, r8653, MPFR_RNDN);
        mpfr_pow(r8655, r8654, r8649, MPFR_RNDN);
        mpfr_mul(r8656, r8649, r8655, MPFR_RNDN);
        mpfr_add(r8657, r8645, r8656, MPFR_RNDN);
        mpfr_div(r8658, r8651, r8657, MPFR_RNDN);
        mpfr_sqrt(r8659, r8658, MPFR_RNDN);
        mpfr_asin(r8660, r8659, MPFR_RNDN);
        return mpfr_get_d(r8660, MPFR_RNDN);
}

static mpfr_t r8661, r8662, r8663, r8664, r8665, r8666, r8667, r8668, r8669, r8670, r8671, r8672, r8673, r8674, r8675, r8676, r8677, r8678;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8661, "1", 10, MPFR_RNDN);
        mpfr_init(r8662);
        mpfr_init(r8663);
        mpfr_init(r8664);
        mpfr_init_set_str(r8665, "2", 10, MPFR_RNDN);
        mpfr_init(r8666);
        mpfr_init(r8667);
        mpfr_init(r8668);
        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);
}

double f_fm(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r8662, Om, MPFR_RNDN);
        mpfr_set_d(r8663, Omc, MPFR_RNDN);
        mpfr_div(r8664, r8662, r8663, MPFR_RNDN);
        ;
        mpfr_pow(r8666, r8664, r8665, MPFR_RNDN);
        mpfr_sub(r8667, r8661, r8666, MPFR_RNDN);
        mpfr_set_d(r8668, t, MPFR_RNDN);
        mpfr_set_d(r8669, l, MPFR_RNDN);
        mpfr_div(r8670, r8668, r8669, MPFR_RNDN);
        mpfr_pow(r8671, r8670, r8665, MPFR_RNDN);
        mpfr_mul(r8672, r8665, r8671, MPFR_RNDN);
        mpfr_add(r8673, r8661, r8672, MPFR_RNDN);
        mpfr_div(r8674, r8667, r8673, MPFR_RNDN);
        mpfr_sqrt(r8675, r8674, MPFR_RNDN);
        mpfr_asin(r8676, r8675, MPFR_RNDN);
        mpfr_log1p(r8677, r8676, MPFR_RNDN);
        mpfr_expm1(r8678, r8677, MPFR_RNDN);
        return mpfr_get_d(r8678, MPFR_RNDN);
}

static mpfr_t r8679, r8680, r8681, r8682, r8683, r8684, r8685, r8686, r8687, r8688, r8689, r8690, r8691, r8692, r8693, r8694, r8695, r8696;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8679, "1", 10, MPFR_RNDN);
        mpfr_init(r8680);
        mpfr_init(r8681);
        mpfr_init(r8682);
        mpfr_init_set_str(r8683, "2", 10, MPFR_RNDN);
        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(r8692);
        mpfr_init(r8693);
        mpfr_init(r8694);
        mpfr_init(r8695);
        mpfr_init(r8696);
}

double f_dm(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r8680, Om, MPFR_RNDN);
        mpfr_set_d(r8681, Omc, MPFR_RNDN);
        mpfr_div(r8682, r8680, r8681, MPFR_RNDN);
        ;
        mpfr_pow(r8684, r8682, r8683, MPFR_RNDN);
        mpfr_sub(r8685, r8679, r8684, MPFR_RNDN);
        mpfr_set_d(r8686, t, MPFR_RNDN);
        mpfr_set_d(r8687, l, MPFR_RNDN);
        mpfr_div(r8688, r8686, r8687, MPFR_RNDN);
        mpfr_pow(r8689, r8688, r8683, MPFR_RNDN);
        mpfr_mul(r8690, r8683, r8689, MPFR_RNDN);
        mpfr_add(r8691, r8679, r8690, MPFR_RNDN);
        mpfr_div(r8692, r8685, r8691, MPFR_RNDN);
        mpfr_sqrt(r8693, r8692, MPFR_RNDN);
        mpfr_asin(r8694, r8693, MPFR_RNDN);
        mpfr_log1p(r8695, r8694, MPFR_RNDN);
        mpfr_expm1(r8696, r8695, MPFR_RNDN);
        return mpfr_get_d(r8696, MPFR_RNDN);
}

