#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 r30462406 = 1;
        float r30462407 = Om;
        float r30462408 = Omc;
        float r30462409 = r30462407 / r30462408;
        float r30462410 = 2;
        float r30462411 = pow(r30462409, r30462410);
        float r30462412 = r30462406 - r30462411;
        float r30462413 = t;
        float r30462414 = l;
        float r30462415 = r30462413 / r30462414;
        float r30462416 = pow(r30462415, r30462410);
        float r30462417 = r30462410 * r30462416;
        float r30462418 = r30462406 + r30462417;
        float r30462419 = r30462412 / r30462418;
        float r30462420 = sqrt(r30462419);
        float r30462421 = asin(r30462420);
        return r30462421;
}

double f_id(double t, double l, double Om, double Omc) {
        double r30462422 = 1;
        double r30462423 = Om;
        double r30462424 = Omc;
        double r30462425 = r30462423 / r30462424;
        double r30462426 = 2;
        double r30462427 = pow(r30462425, r30462426);
        double r30462428 = r30462422 - r30462427;
        double r30462429 = t;
        double r30462430 = l;
        double r30462431 = r30462429 / r30462430;
        double r30462432 = pow(r30462431, r30462426);
        double r30462433 = r30462426 * r30462432;
        double r30462434 = r30462422 + r30462433;
        double r30462435 = r30462428 / r30462434;
        double r30462436 = sqrt(r30462435);
        double r30462437 = asin(r30462436);
        return r30462437;
}


double f_of(float t, float l, float Om, float Omc) {
        float r30462438 = 1;
        float r30462439 = Om;
        float r30462440 = Omc;
        float r30462441 = r30462439 / r30462440;
        float r30462442 = 2;
        float r30462443 = pow(r30462441, r30462442);
        float r30462444 = r30462438 - r30462443;
        float r30462445 = sqrt(r30462444);
        float r30462446 = t;
        float r30462447 = l;
        float r30462448 = r30462446 / r30462447;
        float r30462449 = pow(r30462448, r30462442);
        float r30462450 = r30462442 * r30462449;
        float r30462451 = r30462438 + r30462450;
        float r30462452 = sqrt(r30462451);
        float r30462453 = r30462445 / r30462452;
        float r30462454 = asin(r30462453);
        return r30462454;
}

double f_od(double t, double l, double Om, double Omc) {
        double r30462455 = 1;
        double r30462456 = Om;
        double r30462457 = Omc;
        double r30462458 = r30462456 / r30462457;
        double r30462459 = 2;
        double r30462460 = pow(r30462458, r30462459);
        double r30462461 = r30462455 - r30462460;
        double r30462462 = sqrt(r30462461);
        double r30462463 = t;
        double r30462464 = l;
        double r30462465 = r30462463 / r30462464;
        double r30462466 = pow(r30462465, r30462459);
        double r30462467 = r30462459 * r30462466;
        double r30462468 = r30462455 + r30462467;
        double r30462469 = sqrt(r30462468);
        double r30462470 = r30462462 / r30462469;
        double r30462471 = asin(r30462470);
        return r30462471;
}

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 r30462472, r30462473, r30462474, r30462475, r30462476, r30462477, r30462478, r30462479, r30462480, r30462481, r30462482, r30462483, r30462484, r30462485, r30462486, r30462487;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r30462472, "1", 10, MPFR_RNDN);
        mpfr_init(r30462473);
        mpfr_init(r30462474);
        mpfr_init(r30462475);
        mpfr_init_set_str(r30462476, "2", 10, MPFR_RNDN);
        mpfr_init(r30462477);
        mpfr_init(r30462478);
        mpfr_init(r30462479);
        mpfr_init(r30462480);
        mpfr_init(r30462481);
        mpfr_init(r30462482);
        mpfr_init(r30462483);
        mpfr_init(r30462484);
        mpfr_init(r30462485);
        mpfr_init(r30462486);
        mpfr_init(r30462487);
}

double f_im(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r30462473, Om, MPFR_RNDN);
        mpfr_set_d(r30462474, Omc, MPFR_RNDN);
        mpfr_div(r30462475, r30462473, r30462474, MPFR_RNDN);
        ;
        mpfr_pow(r30462477, r30462475, r30462476, MPFR_RNDN);
        mpfr_sub(r30462478, r30462472, r30462477, MPFR_RNDN);
        mpfr_set_d(r30462479, t, MPFR_RNDN);
        mpfr_set_d(r30462480, l, MPFR_RNDN);
        mpfr_div(r30462481, r30462479, r30462480, MPFR_RNDN);
        mpfr_pow(r30462482, r30462481, r30462476, MPFR_RNDN);
        mpfr_mul(r30462483, r30462476, r30462482, MPFR_RNDN);
        mpfr_add(r30462484, r30462472, r30462483, MPFR_RNDN);
        mpfr_div(r30462485, r30462478, r30462484, MPFR_RNDN);
        mpfr_sqrt(r30462486, r30462485, MPFR_RNDN);
        mpfr_asin(r30462487, r30462486, MPFR_RNDN);
        return mpfr_get_d(r30462487, MPFR_RNDN);
}

static mpfr_t r30462488, r30462489, r30462490, r30462491, r30462492, r30462493, r30462494, r30462495, r30462496, r30462497, r30462498, r30462499, r30462500, r30462501, r30462502, r30462503, r30462504;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r30462488, "1", 10, MPFR_RNDN);
        mpfr_init(r30462489);
        mpfr_init(r30462490);
        mpfr_init(r30462491);
        mpfr_init_set_str(r30462492, "2", 10, MPFR_RNDN);
        mpfr_init(r30462493);
        mpfr_init(r30462494);
        mpfr_init(r30462495);
        mpfr_init(r30462496);
        mpfr_init(r30462497);
        mpfr_init(r30462498);
        mpfr_init(r30462499);
        mpfr_init(r30462500);
        mpfr_init(r30462501);
        mpfr_init(r30462502);
        mpfr_init(r30462503);
        mpfr_init(r30462504);
}

double f_fm(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r30462489, Om, MPFR_RNDN);
        mpfr_set_d(r30462490, Omc, MPFR_RNDN);
        mpfr_div(r30462491, r30462489, r30462490, MPFR_RNDN);
        ;
        mpfr_pow(r30462493, r30462491, r30462492, MPFR_RNDN);
        mpfr_sub(r30462494, r30462488, r30462493, MPFR_RNDN);
        mpfr_sqrt(r30462495, r30462494, MPFR_RNDN);
        mpfr_set_d(r30462496, t, MPFR_RNDN);
        mpfr_set_d(r30462497, l, MPFR_RNDN);
        mpfr_div(r30462498, r30462496, r30462497, MPFR_RNDN);
        mpfr_pow(r30462499, r30462498, r30462492, MPFR_RNDN);
        mpfr_mul(r30462500, r30462492, r30462499, MPFR_RNDN);
        mpfr_add(r30462501, r30462488, r30462500, MPFR_RNDN);
        mpfr_sqrt(r30462502, r30462501, MPFR_RNDN);
        mpfr_div(r30462503, r30462495, r30462502, MPFR_RNDN);
        mpfr_asin(r30462504, r30462503, MPFR_RNDN);
        return mpfr_get_d(r30462504, MPFR_RNDN);
}

static mpfr_t r30462505, r30462506, r30462507, r30462508, r30462509, r30462510, r30462511, r30462512, r30462513, r30462514, r30462515, r30462516, r30462517, r30462518, r30462519, r30462520, r30462521;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r30462505, "1", 10, MPFR_RNDN);
        mpfr_init(r30462506);
        mpfr_init(r30462507);
        mpfr_init(r30462508);
        mpfr_init_set_str(r30462509, "2", 10, MPFR_RNDN);
        mpfr_init(r30462510);
        mpfr_init(r30462511);
        mpfr_init(r30462512);
        mpfr_init(r30462513);
        mpfr_init(r30462514);
        mpfr_init(r30462515);
        mpfr_init(r30462516);
        mpfr_init(r30462517);
        mpfr_init(r30462518);
        mpfr_init(r30462519);
        mpfr_init(r30462520);
        mpfr_init(r30462521);
}

double f_dm(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r30462506, Om, MPFR_RNDN);
        mpfr_set_d(r30462507, Omc, MPFR_RNDN);
        mpfr_div(r30462508, r30462506, r30462507, MPFR_RNDN);
        ;
        mpfr_pow(r30462510, r30462508, r30462509, MPFR_RNDN);
        mpfr_sub(r30462511, r30462505, r30462510, MPFR_RNDN);
        mpfr_sqrt(r30462512, r30462511, MPFR_RNDN);
        mpfr_set_d(r30462513, t, MPFR_RNDN);
        mpfr_set_d(r30462514, l, MPFR_RNDN);
        mpfr_div(r30462515, r30462513, r30462514, MPFR_RNDN);
        mpfr_pow(r30462516, r30462515, r30462509, MPFR_RNDN);
        mpfr_mul(r30462517, r30462509, r30462516, MPFR_RNDN);
        mpfr_add(r30462518, r30462505, r30462517, MPFR_RNDN);
        mpfr_sqrt(r30462519, r30462518, MPFR_RNDN);
        mpfr_div(r30462520, r30462512, r30462519, MPFR_RNDN);
        mpfr_asin(r30462521, r30462520, MPFR_RNDN);
        return mpfr_get_d(r30462521, MPFR_RNDN);
}

