#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 r8582 = 1.0f;
        float r8583 = Om;
        float r8584 = Omc;
        float r8585 = r8583 / r8584;
        float r8586 = 2.0f;
        float r8587 = pow(r8585, r8586);
        float r8588 = r8582 - r8587;
        float r8589 = t;
        float r8590 = l;
        float r8591 = r8589 / r8590;
        float r8592 = pow(r8591, r8586);
        float r8593 = r8586 * r8592;
        float r8594 = r8582 + r8593;
        float r8595 = r8588 / r8594;
        float r8596 = sqrt(r8595);
        float r8597 = asin(r8596);
        return r8597;
}

double f_id(double t, double l, double Om, double Omc) {
        double r8598 = 1.0;
        double r8599 = Om;
        double r8600 = Omc;
        double r8601 = r8599 / r8600;
        double r8602 = 2.0;
        double r8603 = pow(r8601, r8602);
        double r8604 = r8598 - r8603;
        double r8605 = t;
        double r8606 = l;
        double r8607 = r8605 / r8606;
        double r8608 = pow(r8607, r8602);
        double r8609 = r8602 * r8608;
        double r8610 = r8598 + r8609;
        double r8611 = r8604 / r8610;
        double r8612 = sqrt(r8611);
        double r8613 = asin(r8612);
        return r8613;
}


double f_of(float t, float l, float Om, float Omc) {
        float r8614 = 1.0f;
        float r8615 = 3.0f;
        float r8616 = pow(r8614, r8615);
        float r8617 = Om;
        float r8618 = Omc;
        float r8619 = r8617 / r8618;
        float r8620 = 2.0f;
        float r8621 = pow(r8619, r8620);
        float r8622 = pow(r8621, r8615);
        float r8623 = r8616 - r8622;
        float r8624 = t;
        float r8625 = l;
        float r8626 = r8624 / r8625;
        float r8627 = pow(r8626, r8620);
        float r8628 = r8627 * r8620;
        float r8629 = r8628 + r8614;
        float r8630 = r8621 * r8621;
        float r8631 = r8630 + r8621;
        float r8632 = r8614 + r8631;
        float r8633 = r8629 * r8632;
        float r8634 = r8623 / r8633;
        float r8635 = sqrt(r8634);
        float r8636 = asin(r8635);
        return r8636;
}

double f_od(double t, double l, double Om, double Omc) {
        double r8637 = 1.0;
        double r8638 = 3.0;
        double r8639 = pow(r8637, r8638);
        double r8640 = Om;
        double r8641 = Omc;
        double r8642 = r8640 / r8641;
        double r8643 = 2.0;
        double r8644 = pow(r8642, r8643);
        double r8645 = pow(r8644, r8638);
        double r8646 = r8639 - r8645;
        double r8647 = t;
        double r8648 = l;
        double r8649 = r8647 / r8648;
        double r8650 = pow(r8649, r8643);
        double r8651 = r8650 * r8643;
        double r8652 = r8651 + r8637;
        double r8653 = r8644 * r8644;
        double r8654 = r8653 + r8644;
        double r8655 = r8637 + r8654;
        double r8656 = r8652 * r8655;
        double r8657 = r8646 / r8656;
        double r8658 = sqrt(r8657);
        double r8659 = asin(r8658);
        return r8659;
}

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 r8660, r8661, r8662, r8663, r8664, r8665, r8666, r8667, r8668, r8669, r8670, r8671, r8672, r8673, r8674, r8675;

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

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

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

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8676, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8677, "3", 10, MPFR_RNDN);
        mpfr_init(r8678);
        mpfr_init(r8679);
        mpfr_init(r8680);
        mpfr_init(r8681);
        mpfr_init_set_str(r8682, "2", 10, MPFR_RNDN);
        mpfr_init(r8683);
        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);
        mpfr_init(r8697);
        mpfr_init(r8698);
}

double f_fm(double t, double l, double Om, double Omc) {
        ;
        ;
        mpfr_pow(r8678, r8676, r8677, MPFR_RNDN);
        mpfr_set_d(r8679, Om, MPFR_RNDN);
        mpfr_set_d(r8680, Omc, MPFR_RNDN);
        mpfr_div(r8681, r8679, r8680, MPFR_RNDN);
        ;
        mpfr_pow(r8683, r8681, r8682, MPFR_RNDN);
        mpfr_pow(r8684, r8683, r8677, MPFR_RNDN);
        mpfr_sub(r8685, r8678, 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, r8682, MPFR_RNDN);
        mpfr_mul(r8690, r8689, r8682, MPFR_RNDN);
        mpfr_add(r8691, r8690, r8676, MPFR_RNDN);
        mpfr_mul(r8692, r8683, r8683, MPFR_RNDN);
        mpfr_add(r8693, r8692, r8683, MPFR_RNDN);
        mpfr_add(r8694, r8676, r8693, MPFR_RNDN);
        mpfr_mul(r8695, r8691, r8694, MPFR_RNDN);
        mpfr_div(r8696, r8685, r8695, MPFR_RNDN);
        mpfr_sqrt(r8697, r8696, MPFR_RNDN);
        mpfr_asin(r8698, r8697, MPFR_RNDN);
        return mpfr_get_d(r8698, MPFR_RNDN);
}

static mpfr_t r8699, r8700, r8701, r8702, r8703, r8704, r8705, r8706, r8707, r8708, r8709, r8710, r8711, r8712, r8713, r8714, r8715, r8716, r8717, r8718, r8719, r8720, r8721;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8699, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8700, "3", 10, MPFR_RNDN);
        mpfr_init(r8701);
        mpfr_init(r8702);
        mpfr_init(r8703);
        mpfr_init(r8704);
        mpfr_init_set_str(r8705, "2", 10, MPFR_RNDN);
        mpfr_init(r8706);
        mpfr_init(r8707);
        mpfr_init(r8708);
        mpfr_init(r8709);
        mpfr_init(r8710);
        mpfr_init(r8711);
        mpfr_init(r8712);
        mpfr_init(r8713);
        mpfr_init(r8714);
        mpfr_init(r8715);
        mpfr_init(r8716);
        mpfr_init(r8717);
        mpfr_init(r8718);
        mpfr_init(r8719);
        mpfr_init(r8720);
        mpfr_init(r8721);
}

double f_dm(double t, double l, double Om, double Omc) {
        ;
        ;
        mpfr_pow(r8701, r8699, r8700, MPFR_RNDN);
        mpfr_set_d(r8702, Om, MPFR_RNDN);
        mpfr_set_d(r8703, Omc, MPFR_RNDN);
        mpfr_div(r8704, r8702, r8703, MPFR_RNDN);
        ;
        mpfr_pow(r8706, r8704, r8705, MPFR_RNDN);
        mpfr_pow(r8707, r8706, r8700, MPFR_RNDN);
        mpfr_sub(r8708, r8701, r8707, MPFR_RNDN);
        mpfr_set_d(r8709, t, MPFR_RNDN);
        mpfr_set_d(r8710, l, MPFR_RNDN);
        mpfr_div(r8711, r8709, r8710, MPFR_RNDN);
        mpfr_pow(r8712, r8711, r8705, MPFR_RNDN);
        mpfr_mul(r8713, r8712, r8705, MPFR_RNDN);
        mpfr_add(r8714, r8713, r8699, MPFR_RNDN);
        mpfr_mul(r8715, r8706, r8706, MPFR_RNDN);
        mpfr_add(r8716, r8715, r8706, MPFR_RNDN);
        mpfr_add(r8717, r8699, r8716, MPFR_RNDN);
        mpfr_mul(r8718, r8714, r8717, MPFR_RNDN);
        mpfr_div(r8719, r8708, r8718, MPFR_RNDN);
        mpfr_sqrt(r8720, r8719, MPFR_RNDN);
        mpfr_asin(r8721, r8720, MPFR_RNDN);
        return mpfr_get_d(r8721, MPFR_RNDN);
}

