#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 r8122 = 1.0f;
        float r8123 = Om;
        float r8124 = Omc;
        float r8125 = r8123 / r8124;
        float r8126 = 2.0f;
        float r8127 = pow(r8125, r8126);
        float r8128 = r8122 - r8127;
        float r8129 = t;
        float r8130 = l;
        float r8131 = r8129 / r8130;
        float r8132 = pow(r8131, r8126);
        float r8133 = r8126 * r8132;
        float r8134 = r8122 + r8133;
        float r8135 = r8128 / r8134;
        float r8136 = sqrt(r8135);
        float r8137 = asin(r8136);
        return r8137;
}

double f_id(double t, double l, double Om, double Omc) {
        double r8138 = 1.0;
        double r8139 = Om;
        double r8140 = Omc;
        double r8141 = r8139 / r8140;
        double r8142 = 2.0;
        double r8143 = pow(r8141, r8142);
        double r8144 = r8138 - r8143;
        double r8145 = t;
        double r8146 = l;
        double r8147 = r8145 / r8146;
        double r8148 = pow(r8147, r8142);
        double r8149 = r8142 * r8148;
        double r8150 = r8138 + r8149;
        double r8151 = r8144 / r8150;
        double r8152 = sqrt(r8151);
        double r8153 = asin(r8152);
        return r8153;
}


double f_of(float t, float l, float Om, float Omc) {
        float r8154 = 1.0f;
        float r8155 = Om;
        float r8156 = Omc;
        float r8157 = r8155 / r8156;
        float r8158 = r8157 * r8157;
        float r8159 = r8154 - r8158;
        float r8160 = t;
        float r8161 = l;
        float r8162 = r8160 / r8161;
        float r8163 = r8162 * r8162;
        float r8164 = 2.0f;
        float r8165 = r8163 * r8164;
        float r8166 = r8154 + r8165;
        float r8167 = r8159 / r8166;
        float r8168 = sqrt(r8167);
        float r8169 = asin(r8168);
        return r8169;
}

double f_od(double t, double l, double Om, double Omc) {
        double r8170 = 1.0;
        double r8171 = Om;
        double r8172 = Omc;
        double r8173 = r8171 / r8172;
        double r8174 = r8173 * r8173;
        double r8175 = r8170 - r8174;
        double r8176 = t;
        double r8177 = l;
        double r8178 = r8176 / r8177;
        double r8179 = r8178 * r8178;
        double r8180 = 2.0;
        double r8181 = r8179 * r8180;
        double r8182 = r8170 + r8181;
        double r8183 = r8175 / r8182;
        double r8184 = sqrt(r8183);
        double r8185 = asin(r8184);
        return r8185;
}

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 r8186, r8187, r8188, r8189, r8190, r8191, r8192, r8193, r8194, r8195, r8196, r8197, r8198, r8199, r8200, r8201;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8186, "1", 10, MPFR_RNDN);
        mpfr_init(r8187);
        mpfr_init(r8188);
        mpfr_init(r8189);
        mpfr_init_set_str(r8190, "2", 10, MPFR_RNDN);
        mpfr_init(r8191);
        mpfr_init(r8192);
        mpfr_init(r8193);
        mpfr_init(r8194);
        mpfr_init(r8195);
        mpfr_init(r8196);
        mpfr_init(r8197);
        mpfr_init(r8198);
        mpfr_init(r8199);
        mpfr_init(r8200);
        mpfr_init(r8201);
}

double f_im(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r8187, Om, MPFR_RNDN);
        mpfr_set_d(r8188, Omc, MPFR_RNDN);
        mpfr_div(r8189, r8187, r8188, MPFR_RNDN);
        ;
        mpfr_pow(r8191, r8189, r8190, MPFR_RNDN);
        mpfr_sub(r8192, r8186, r8191, MPFR_RNDN);
        mpfr_set_d(r8193, t, MPFR_RNDN);
        mpfr_set_d(r8194, l, MPFR_RNDN);
        mpfr_div(r8195, r8193, r8194, MPFR_RNDN);
        mpfr_pow(r8196, r8195, r8190, MPFR_RNDN);
        mpfr_mul(r8197, r8190, r8196, MPFR_RNDN);
        mpfr_add(r8198, r8186, r8197, MPFR_RNDN);
        mpfr_div(r8199, r8192, r8198, MPFR_RNDN);
        mpfr_sqrt(r8200, r8199, MPFR_RNDN);
        mpfr_asin(r8201, r8200, MPFR_RNDN);
        return mpfr_get_d(r8201, MPFR_RNDN);
}

static mpfr_t r8202, r8203, r8204, r8205, r8206, r8207, r8208, r8209, r8210, r8211, r8212, r8213, r8214, r8215, r8216, r8217;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8202, "1", 10, MPFR_RNDN);
        mpfr_init(r8203);
        mpfr_init(r8204);
        mpfr_init(r8205);
        mpfr_init(r8206);
        mpfr_init(r8207);
        mpfr_init(r8208);
        mpfr_init(r8209);
        mpfr_init(r8210);
        mpfr_init(r8211);
        mpfr_init_set_str(r8212, "2", 10, MPFR_RNDN);
        mpfr_init(r8213);
        mpfr_init(r8214);
        mpfr_init(r8215);
        mpfr_init(r8216);
        mpfr_init(r8217);
}

double f_fm(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r8203, Om, MPFR_RNDN);
        mpfr_set_d(r8204, Omc, MPFR_RNDN);
        mpfr_div(r8205, r8203, r8204, MPFR_RNDN);
        mpfr_mul(r8206, r8205, r8205, MPFR_RNDN);
        mpfr_sub(r8207, r8202, r8206, MPFR_RNDN);
        mpfr_set_d(r8208, t, MPFR_RNDN);
        mpfr_set_d(r8209, l, MPFR_RNDN);
        mpfr_div(r8210, r8208, r8209, MPFR_RNDN);
        mpfr_mul(r8211, r8210, r8210, MPFR_RNDN);
        ;
        mpfr_mul(r8213, r8211, r8212, MPFR_RNDN);
        mpfr_add(r8214, r8202, r8213, MPFR_RNDN);
        mpfr_div(r8215, r8207, r8214, MPFR_RNDN);
        mpfr_sqrt(r8216, r8215, MPFR_RNDN);
        mpfr_asin(r8217, r8216, MPFR_RNDN);
        return mpfr_get_d(r8217, MPFR_RNDN);
}

static mpfr_t r8218, r8219, r8220, r8221, r8222, r8223, r8224, r8225, r8226, r8227, r8228, r8229, r8230, r8231, r8232, r8233;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8218, "1", 10, MPFR_RNDN);
        mpfr_init(r8219);
        mpfr_init(r8220);
        mpfr_init(r8221);
        mpfr_init(r8222);
        mpfr_init(r8223);
        mpfr_init(r8224);
        mpfr_init(r8225);
        mpfr_init(r8226);
        mpfr_init(r8227);
        mpfr_init_set_str(r8228, "2", 10, MPFR_RNDN);
        mpfr_init(r8229);
        mpfr_init(r8230);
        mpfr_init(r8231);
        mpfr_init(r8232);
        mpfr_init(r8233);
}

double f_dm(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r8219, Om, MPFR_RNDN);
        mpfr_set_d(r8220, Omc, MPFR_RNDN);
        mpfr_div(r8221, r8219, r8220, MPFR_RNDN);
        mpfr_mul(r8222, r8221, r8221, MPFR_RNDN);
        mpfr_sub(r8223, r8218, r8222, MPFR_RNDN);
        mpfr_set_d(r8224, t, MPFR_RNDN);
        mpfr_set_d(r8225, l, MPFR_RNDN);
        mpfr_div(r8226, r8224, r8225, MPFR_RNDN);
        mpfr_mul(r8227, r8226, r8226, MPFR_RNDN);
        ;
        mpfr_mul(r8229, r8227, r8228, MPFR_RNDN);
        mpfr_add(r8230, r8218, r8229, MPFR_RNDN);
        mpfr_div(r8231, r8223, r8230, MPFR_RNDN);
        mpfr_sqrt(r8232, r8231, MPFR_RNDN);
        mpfr_asin(r8233, r8232, MPFR_RNDN);
        return mpfr_get_d(r8233, MPFR_RNDN);
}

