#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 r20439 = 1;
        float r20440 = Om;
        float r20441 = Omc;
        float r20442 = r20440 / r20441;
        float r20443 = 2;
        float r20444 = pow(r20442, r20443);
        float r20445 = r20439 - r20444;
        float r20446 = t;
        float r20447 = l;
        float r20448 = r20446 / r20447;
        float r20449 = pow(r20448, r20443);
        float r20450 = r20443 * r20449;
        float r20451 = r20439 + r20450;
        float r20452 = r20445 / r20451;
        float r20453 = sqrt(r20452);
        float r20454 = asin(r20453);
        return r20454;
}

double f_id(double t, double l, double Om, double Omc) {
        double r20455 = 1;
        double r20456 = Om;
        double r20457 = Omc;
        double r20458 = r20456 / r20457;
        double r20459 = 2;
        double r20460 = pow(r20458, r20459);
        double r20461 = r20455 - r20460;
        double r20462 = t;
        double r20463 = l;
        double r20464 = r20462 / r20463;
        double r20465 = pow(r20464, r20459);
        double r20466 = r20459 * r20465;
        double r20467 = r20455 + r20466;
        double r20468 = r20461 / r20467;
        double r20469 = sqrt(r20468);
        double r20470 = asin(r20469);
        return r20470;
}


double f_of(float t, float l, float Om, float Omc) {
        float r20471 = 1;
        float r20472 = Om;
        float r20473 = Omc;
        float r20474 = r20472 / r20473;
        float r20475 = 2;
        float r20476 = pow(r20474, r20475);
        float r20477 = r20471 - r20476;
        float r20478 = t;
        float r20479 = l;
        float r20480 = r20478 / r20479;
        float r20481 = pow(r20480, r20475);
        float r20482 = r20475 * r20481;
        float r20483 = r20471 + r20482;
        float r20484 = r20477 / r20483;
        float r20485 = sqrt(r20484);
        float r20486 = asin(r20485);
        return r20486;
}

double f_od(double t, double l, double Om, double Omc) {
        double r20487 = 1;
        double r20488 = Om;
        double r20489 = Omc;
        double r20490 = r20488 / r20489;
        double r20491 = 2;
        double r20492 = pow(r20490, r20491);
        double r20493 = r20487 - r20492;
        double r20494 = t;
        double r20495 = l;
        double r20496 = r20494 / r20495;
        double r20497 = pow(r20496, r20491);
        double r20498 = r20491 * r20497;
        double r20499 = r20487 + r20498;
        double r20500 = r20493 / r20499;
        double r20501 = sqrt(r20500);
        double r20502 = asin(r20501);
        return r20502;
}

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 r20503, r20504, r20505, r20506, r20507, r20508, r20509, r20510, r20511, r20512, r20513, r20514, r20515, r20516, r20517, r20518;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r20503, "1", 10, MPFR_RNDN);
        mpfr_init(r20504);
        mpfr_init(r20505);
        mpfr_init(r20506);
        mpfr_init_set_str(r20507, "2", 10, MPFR_RNDN);
        mpfr_init(r20508);
        mpfr_init(r20509);
        mpfr_init(r20510);
        mpfr_init(r20511);
        mpfr_init(r20512);
        mpfr_init(r20513);
        mpfr_init(r20514);
        mpfr_init(r20515);
        mpfr_init(r20516);
        mpfr_init(r20517);
        mpfr_init(r20518);
}

double f_im(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r20504, Om, MPFR_RNDN);
        mpfr_set_d(r20505, Omc, MPFR_RNDN);
        mpfr_div(r20506, r20504, r20505, MPFR_RNDN);
        ;
        mpfr_pow(r20508, r20506, r20507, MPFR_RNDN);
        mpfr_sub(r20509, r20503, r20508, MPFR_RNDN);
        mpfr_set_d(r20510, t, MPFR_RNDN);
        mpfr_set_d(r20511, l, MPFR_RNDN);
        mpfr_div(r20512, r20510, r20511, MPFR_RNDN);
        mpfr_pow(r20513, r20512, r20507, MPFR_RNDN);
        mpfr_mul(r20514, r20507, r20513, MPFR_RNDN);
        mpfr_add(r20515, r20503, r20514, MPFR_RNDN);
        mpfr_div(r20516, r20509, r20515, MPFR_RNDN);
        mpfr_sqrt(r20517, r20516, MPFR_RNDN);
        mpfr_asin(r20518, r20517, MPFR_RNDN);
        return mpfr_get_d(r20518, MPFR_RNDN);
}

static mpfr_t r20519, r20520, r20521, r20522, r20523, r20524, r20525, r20526, r20527, r20528, r20529, r20530, r20531, r20532, r20533, r20534;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r20519, "1", 10, MPFR_RNDN);
        mpfr_init(r20520);
        mpfr_init(r20521);
        mpfr_init(r20522);
        mpfr_init_set_str(r20523, "2", 10, MPFR_RNDN);
        mpfr_init(r20524);
        mpfr_init(r20525);
        mpfr_init(r20526);
        mpfr_init(r20527);
        mpfr_init(r20528);
        mpfr_init(r20529);
        mpfr_init(r20530);
        mpfr_init(r20531);
        mpfr_init(r20532);
        mpfr_init(r20533);
        mpfr_init(r20534);
}

double f_fm(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r20520, Om, MPFR_RNDN);
        mpfr_set_d(r20521, Omc, MPFR_RNDN);
        mpfr_div(r20522, r20520, r20521, MPFR_RNDN);
        ;
        mpfr_pow(r20524, r20522, r20523, MPFR_RNDN);
        mpfr_sub(r20525, r20519, r20524, MPFR_RNDN);
        mpfr_set_d(r20526, t, MPFR_RNDN);
        mpfr_set_d(r20527, l, MPFR_RNDN);
        mpfr_div(r20528, r20526, r20527, MPFR_RNDN);
        mpfr_pow(r20529, r20528, r20523, MPFR_RNDN);
        mpfr_mul(r20530, r20523, r20529, MPFR_RNDN);
        mpfr_add(r20531, r20519, r20530, MPFR_RNDN);
        mpfr_div(r20532, r20525, r20531, MPFR_RNDN);
        mpfr_sqrt(r20533, r20532, MPFR_RNDN);
        mpfr_asin(r20534, r20533, MPFR_RNDN);
        return mpfr_get_d(r20534, MPFR_RNDN);
}

static mpfr_t r20535, r20536, r20537, r20538, r20539, r20540, r20541, r20542, r20543, r20544, r20545, r20546, r20547, r20548, r20549, r20550;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r20535, "1", 10, MPFR_RNDN);
        mpfr_init(r20536);
        mpfr_init(r20537);
        mpfr_init(r20538);
        mpfr_init_set_str(r20539, "2", 10, MPFR_RNDN);
        mpfr_init(r20540);
        mpfr_init(r20541);
        mpfr_init(r20542);
        mpfr_init(r20543);
        mpfr_init(r20544);
        mpfr_init(r20545);
        mpfr_init(r20546);
        mpfr_init(r20547);
        mpfr_init(r20548);
        mpfr_init(r20549);
        mpfr_init(r20550);
}

double f_dm(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r20536, Om, MPFR_RNDN);
        mpfr_set_d(r20537, Omc, MPFR_RNDN);
        mpfr_div(r20538, r20536, r20537, MPFR_RNDN);
        ;
        mpfr_pow(r20540, r20538, r20539, MPFR_RNDN);
        mpfr_sub(r20541, r20535, r20540, MPFR_RNDN);
        mpfr_set_d(r20542, t, MPFR_RNDN);
        mpfr_set_d(r20543, l, MPFR_RNDN);
        mpfr_div(r20544, r20542, r20543, MPFR_RNDN);
        mpfr_pow(r20545, r20544, r20539, MPFR_RNDN);
        mpfr_mul(r20546, r20539, r20545, MPFR_RNDN);
        mpfr_add(r20547, r20535, r20546, MPFR_RNDN);
        mpfr_div(r20548, r20541, r20547, MPFR_RNDN);
        mpfr_sqrt(r20549, r20548, MPFR_RNDN);
        mpfr_asin(r20550, r20549, MPFR_RNDN);
        return mpfr_get_d(r20550, MPFR_RNDN);
}

