#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 r8849 = 1;
        float r8850 = Om;
        float r8851 = Omc;
        float r8852 = r8850 / r8851;
        float r8853 = 2;
        float r8854 = pow(r8852, r8853);
        float r8855 = r8849 - r8854;
        float r8856 = t;
        float r8857 = l;
        float r8858 = r8856 / r8857;
        float r8859 = pow(r8858, r8853);
        float r8860 = r8853 * r8859;
        float r8861 = r8849 + r8860;
        float r8862 = r8855 / r8861;
        float r8863 = sqrt(r8862);
        float r8864 = asin(r8863);
        return r8864;
}

double f_id(double t, double l, double Om, double Omc) {
        double r8865 = 1;
        double r8866 = Om;
        double r8867 = Omc;
        double r8868 = r8866 / r8867;
        double r8869 = 2;
        double r8870 = pow(r8868, r8869);
        double r8871 = r8865 - r8870;
        double r8872 = t;
        double r8873 = l;
        double r8874 = r8872 / r8873;
        double r8875 = pow(r8874, r8869);
        double r8876 = r8869 * r8875;
        double r8877 = r8865 + r8876;
        double r8878 = r8871 / r8877;
        double r8879 = sqrt(r8878);
        double r8880 = asin(r8879);
        return r8880;
}


double f_of(float t, float l, float Om, float Omc) {
        float r8881 = 1;
        float r8882 = Om;
        float r8883 = Omc;
        float r8884 = r8882 / r8883;
        float r8885 = 2;
        float r8886 = pow(r8884, r8885);
        float r8887 = r8881 - r8886;
        float r8888 = t;
        float r8889 = l;
        float r8890 = r8888 / r8889;
        float r8891 = pow(r8890, r8885);
        float r8892 = r8885 * r8891;
        float r8893 = r8881 + r8892;
        float r8894 = r8887 / r8893;
        float r8895 = sqrt(r8894);
        float r8896 = asin(r8895);
        return r8896;
}

double f_od(double t, double l, double Om, double Omc) {
        double r8897 = 1;
        double r8898 = Om;
        double r8899 = Omc;
        double r8900 = r8898 / r8899;
        double r8901 = 2;
        double r8902 = pow(r8900, r8901);
        double r8903 = r8897 - r8902;
        double r8904 = t;
        double r8905 = l;
        double r8906 = r8904 / r8905;
        double r8907 = pow(r8906, r8901);
        double r8908 = r8901 * r8907;
        double r8909 = r8897 + r8908;
        double r8910 = r8903 / r8909;
        double r8911 = sqrt(r8910);
        double r8912 = asin(r8911);
        return r8912;
}

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 r8913, r8914, r8915, r8916, r8917, r8918, r8919, r8920, r8921, r8922, r8923, r8924, r8925, r8926, r8927, r8928;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8913, "1", 10, MPFR_RNDN);
        mpfr_init(r8914);
        mpfr_init(r8915);
        mpfr_init(r8916);
        mpfr_init_set_str(r8917, "2", 10, MPFR_RNDN);
        mpfr_init(r8918);
        mpfr_init(r8919);
        mpfr_init(r8920);
        mpfr_init(r8921);
        mpfr_init(r8922);
        mpfr_init(r8923);
        mpfr_init(r8924);
        mpfr_init(r8925);
        mpfr_init(r8926);
        mpfr_init(r8927);
        mpfr_init(r8928);
}

double f_im(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r8914, Om, MPFR_RNDN);
        mpfr_set_d(r8915, Omc, MPFR_RNDN);
        mpfr_div(r8916, r8914, r8915, MPFR_RNDN);
        ;
        mpfr_pow(r8918, r8916, r8917, MPFR_RNDN);
        mpfr_sub(r8919, r8913, r8918, MPFR_RNDN);
        mpfr_set_d(r8920, t, MPFR_RNDN);
        mpfr_set_d(r8921, l, MPFR_RNDN);
        mpfr_div(r8922, r8920, r8921, MPFR_RNDN);
        mpfr_pow(r8923, r8922, r8917, MPFR_RNDN);
        mpfr_mul(r8924, r8917, r8923, MPFR_RNDN);
        mpfr_add(r8925, r8913, r8924, MPFR_RNDN);
        mpfr_div(r8926, r8919, r8925, MPFR_RNDN);
        mpfr_sqrt(r8927, r8926, MPFR_RNDN);
        mpfr_asin(r8928, r8927, MPFR_RNDN);
        return mpfr_get_d(r8928, MPFR_RNDN);
}

static mpfr_t r8929, r8930, r8931, r8932, r8933, r8934, r8935, r8936, r8937, r8938, r8939, r8940, r8941, r8942, r8943, r8944;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8929, "1", 10, MPFR_RNDN);
        mpfr_init(r8930);
        mpfr_init(r8931);
        mpfr_init(r8932);
        mpfr_init_set_str(r8933, "2", 10, MPFR_RNDN);
        mpfr_init(r8934);
        mpfr_init(r8935);
        mpfr_init(r8936);
        mpfr_init(r8937);
        mpfr_init(r8938);
        mpfr_init(r8939);
        mpfr_init(r8940);
        mpfr_init(r8941);
        mpfr_init(r8942);
        mpfr_init(r8943);
        mpfr_init(r8944);
}

double f_fm(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r8930, Om, MPFR_RNDN);
        mpfr_set_d(r8931, Omc, MPFR_RNDN);
        mpfr_div(r8932, r8930, r8931, MPFR_RNDN);
        ;
        mpfr_pow(r8934, r8932, r8933, MPFR_RNDN);
        mpfr_sub(r8935, r8929, r8934, MPFR_RNDN);
        mpfr_set_d(r8936, t, MPFR_RNDN);
        mpfr_set_d(r8937, l, MPFR_RNDN);
        mpfr_div(r8938, r8936, r8937, MPFR_RNDN);
        mpfr_pow(r8939, r8938, r8933, MPFR_RNDN);
        mpfr_mul(r8940, r8933, r8939, MPFR_RNDN);
        mpfr_add(r8941, r8929, r8940, MPFR_RNDN);
        mpfr_div(r8942, r8935, r8941, MPFR_RNDN);
        mpfr_sqrt(r8943, r8942, MPFR_RNDN);
        mpfr_asin(r8944, r8943, MPFR_RNDN);
        return mpfr_get_d(r8944, MPFR_RNDN);
}

static mpfr_t r8945, r8946, r8947, r8948, r8949, r8950, r8951, r8952, r8953, r8954, r8955, r8956, r8957, r8958, r8959, r8960;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8945, "1", 10, MPFR_RNDN);
        mpfr_init(r8946);
        mpfr_init(r8947);
        mpfr_init(r8948);
        mpfr_init_set_str(r8949, "2", 10, MPFR_RNDN);
        mpfr_init(r8950);
        mpfr_init(r8951);
        mpfr_init(r8952);
        mpfr_init(r8953);
        mpfr_init(r8954);
        mpfr_init(r8955);
        mpfr_init(r8956);
        mpfr_init(r8957);
        mpfr_init(r8958);
        mpfr_init(r8959);
        mpfr_init(r8960);
}

double f_dm(double t, double l, double Om, double Omc) {
        ;
        mpfr_set_d(r8946, Om, MPFR_RNDN);
        mpfr_set_d(r8947, Omc, MPFR_RNDN);
        mpfr_div(r8948, r8946, r8947, MPFR_RNDN);
        ;
        mpfr_pow(r8950, r8948, r8949, MPFR_RNDN);
        mpfr_sub(r8951, r8945, r8950, MPFR_RNDN);
        mpfr_set_d(r8952, t, MPFR_RNDN);
        mpfr_set_d(r8953, l, MPFR_RNDN);
        mpfr_div(r8954, r8952, r8953, MPFR_RNDN);
        mpfr_pow(r8955, r8954, r8949, MPFR_RNDN);
        mpfr_mul(r8956, r8949, r8955, MPFR_RNDN);
        mpfr_add(r8957, r8945, r8956, MPFR_RNDN);
        mpfr_div(r8958, r8951, r8957, MPFR_RNDN);
        mpfr_sqrt(r8959, r8958, MPFR_RNDN);
        mpfr_asin(r8960, r8959, MPFR_RNDN);
        return mpfr_get_d(r8960, MPFR_RNDN);
}

