#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Toniolo and Linder, Equation (13)";

double f_if(float n, float U, float t, float l, float Om, float U_) {
        float r7994 = 2;
        float r7995 = n;
        float r7996 = r7994 * r7995;
        float r7997 = U;
        float r7998 = r7996 * r7997;
        float r7999 = t;
        float r8000 = l;
        float r8001 = r8000 * r8000;
        float r8002 = Om;
        float r8003 = r8001 / r8002;
        float r8004 = r7994 * r8003;
        float r8005 = r7999 - r8004;
        float r8006 = r8000 / r8002;
        float r8007 = pow(r8006, r7994);
        float r8008 = r7995 * r8007;
        float r8009 = U_;
        float r8010 = r7997 - r8009;
        float r8011 = r8008 * r8010;
        float r8012 = r8005 - r8011;
        float r8013 = r7998 * r8012;
        float r8014 = sqrt(r8013);
        return r8014;
}

double f_id(double n, double U, double t, double l, double Om, double U_) {
        double r8015 = 2;
        double r8016 = n;
        double r8017 = r8015 * r8016;
        double r8018 = U;
        double r8019 = r8017 * r8018;
        double r8020 = t;
        double r8021 = l;
        double r8022 = r8021 * r8021;
        double r8023 = Om;
        double r8024 = r8022 / r8023;
        double r8025 = r8015 * r8024;
        double r8026 = r8020 - r8025;
        double r8027 = r8021 / r8023;
        double r8028 = pow(r8027, r8015);
        double r8029 = r8016 * r8028;
        double r8030 = U_;
        double r8031 = r8018 - r8030;
        double r8032 = r8029 * r8031;
        double r8033 = r8026 - r8032;
        double r8034 = r8019 * r8033;
        double r8035 = sqrt(r8034);
        return r8035;
}


double f_of(float n, float U, float t, float l, float Om, float U_) {
        float r8036 = 2;
        float r8037 = n;
        float r8038 = r8036 * r8037;
        float r8039 = U;
        float r8040 = r8038 * r8039;
        float r8041 = -1.0924168687415648e-300;
        bool r8042 = r8040 <= r8041;
        float r8043 = r8039 * r8037;
        float r8044 = r8036 * r8043;
        float r8045 = U_;
        float r8046 = r8045 - r8039;
        float r8047 = l;
        float r8048 = Om;
        float r8049 = r8047 / r8048;
        float r8050 = r8046 * r8049;
        float r8051 = r8050 * r8049;
        float r8052 = t;
        float r8053 = r8047 * r8036;
        float r8054 = r8053 * r8049;
        float r8055 = r8052 - r8054;
        float r8056 = fma(r8051, r8037, r8055);
        float r8057 = r8044 * r8056;
        float r8058 = 0;
        float r8059 = r8058 * r8037;
        float r8060 = r8039 * r8036;
        float r8061 = r8059 * r8060;
        float r8062 = r8057 + r8061;
        float r8063 = sqrt(r8062);
        float r8064 = 2.5691413583745e-322;
        bool r8065 = r8040 <= r8064;
        float r8066 = r8047 * r8047;
        float r8067 = r8066 / r8048;
        float r8068 = r8036 * r8067;
        float r8069 = r8052 - r8068;
        float r8070 = pow(r8049, r8036);
        float r8071 = r8037 * r8070;
        float r8072 = r8039 - r8045;
        float r8073 = r8071 * r8072;
        float r8074 = r8069 - r8073;
        float r8075 = r8039 * r8074;
        float r8076 = r8038 * r8075;
        float r8077 = sqrt(r8076);
        float r8078 = sqrt(r8040);
        float r8079 = sqrt(r8074);
        float r8080 = r8078 * r8079;
        float r8081 = r8065 ? r8077 : r8080;
        float r8082 = r8042 ? r8063 : r8081;
        return r8082;
}

double f_od(double n, double U, double t, double l, double Om, double U_) {
        double r8083 = 2;
        double r8084 = n;
        double r8085 = r8083 * r8084;
        double r8086 = U;
        double r8087 = r8085 * r8086;
        double r8088 = -1.0924168687415648e-300;
        bool r8089 = r8087 <= r8088;
        double r8090 = r8086 * r8084;
        double r8091 = r8083 * r8090;
        double r8092 = U_;
        double r8093 = r8092 - r8086;
        double r8094 = l;
        double r8095 = Om;
        double r8096 = r8094 / r8095;
        double r8097 = r8093 * r8096;
        double r8098 = r8097 * r8096;
        double r8099 = t;
        double r8100 = r8094 * r8083;
        double r8101 = r8100 * r8096;
        double r8102 = r8099 - r8101;
        double r8103 = fma(r8098, r8084, r8102);
        double r8104 = r8091 * r8103;
        double r8105 = 0;
        double r8106 = r8105 * r8084;
        double r8107 = r8086 * r8083;
        double r8108 = r8106 * r8107;
        double r8109 = r8104 + r8108;
        double r8110 = sqrt(r8109);
        double r8111 = 2.5691413583745e-322;
        bool r8112 = r8087 <= r8111;
        double r8113 = r8094 * r8094;
        double r8114 = r8113 / r8095;
        double r8115 = r8083 * r8114;
        double r8116 = r8099 - r8115;
        double r8117 = pow(r8096, r8083);
        double r8118 = r8084 * r8117;
        double r8119 = r8086 - r8092;
        double r8120 = r8118 * r8119;
        double r8121 = r8116 - r8120;
        double r8122 = r8086 * r8121;
        double r8123 = r8085 * r8122;
        double r8124 = sqrt(r8123);
        double r8125 = sqrt(r8087);
        double r8126 = sqrt(r8121);
        double r8127 = r8125 * r8126;
        double r8128 = r8112 ? r8124 : r8127;
        double r8129 = r8089 ? r8110 : r8128;
        return r8129;
}

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 r8130, r8131, r8132, r8133, r8134, r8135, r8136, r8137, r8138, r8139, r8140, r8141, r8142, r8143, r8144, r8145, r8146, r8147, r8148, r8149, r8150;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8130, "2", 10, MPFR_RNDN);
        mpfr_init(r8131);
        mpfr_init(r8132);
        mpfr_init(r8133);
        mpfr_init(r8134);
        mpfr_init(r8135);
        mpfr_init(r8136);
        mpfr_init(r8137);
        mpfr_init(r8138);
        mpfr_init(r8139);
        mpfr_init(r8140);
        mpfr_init(r8141);
        mpfr_init(r8142);
        mpfr_init(r8143);
        mpfr_init(r8144);
        mpfr_init(r8145);
        mpfr_init(r8146);
        mpfr_init(r8147);
        mpfr_init(r8148);
        mpfr_init(r8149);
        mpfr_init(r8150);
}

double f_im(double n, double U, double t, double l, double Om, double U_) {
        ;
        mpfr_set_d(r8131, n, MPFR_RNDN);
        mpfr_mul(r8132, r8130, r8131, MPFR_RNDN);
        mpfr_set_d(r8133, U, MPFR_RNDN);
        mpfr_mul(r8134, r8132, r8133, MPFR_RNDN);
        mpfr_set_d(r8135, t, MPFR_RNDN);
        mpfr_set_d(r8136, l, MPFR_RNDN);
        mpfr_mul(r8137, r8136, r8136, MPFR_RNDN);
        mpfr_set_d(r8138, Om, MPFR_RNDN);
        mpfr_div(r8139, r8137, r8138, MPFR_RNDN);
        mpfr_mul(r8140, r8130, r8139, MPFR_RNDN);
        mpfr_sub(r8141, r8135, r8140, MPFR_RNDN);
        mpfr_div(r8142, r8136, r8138, MPFR_RNDN);
        mpfr_pow(r8143, r8142, r8130, MPFR_RNDN);
        mpfr_mul(r8144, r8131, r8143, MPFR_RNDN);
        mpfr_set_d(r8145, U_, MPFR_RNDN);
        mpfr_sub(r8146, r8133, r8145, MPFR_RNDN);
        mpfr_mul(r8147, r8144, r8146, MPFR_RNDN);
        mpfr_sub(r8148, r8141, r8147, MPFR_RNDN);
        mpfr_mul(r8149, r8134, r8148, MPFR_RNDN);
        mpfr_sqrt(r8150, r8149, MPFR_RNDN);
        return mpfr_get_d(r8150, MPFR_RNDN);
}

static mpfr_t r8151, r8152, r8153, r8154, r8155, r8156, r8157, r8158, r8159, r8160, r8161, r8162, r8163, r8164, r8165, r8166, r8167, r8168, r8169, r8170, r8171, r8172, r8173, r8174, r8175, r8176, r8177, r8178, r8179, r8180, r8181, r8182, r8183, r8184, r8185, r8186, r8187, r8188, r8189, r8190, r8191, r8192, r8193, r8194, r8195, r8196, r8197;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8151, "2", 10, MPFR_RNDN);
        mpfr_init(r8152);
        mpfr_init(r8153);
        mpfr_init(r8154);
        mpfr_init(r8155);
        mpfr_init_set_str(r8156, "-1.0924168687415648e-300", 10, MPFR_RNDN);
        mpfr_init(r8157);
        mpfr_init(r8158);
        mpfr_init(r8159);
        mpfr_init(r8160);
        mpfr_init(r8161);
        mpfr_init(r8162);
        mpfr_init(r8163);
        mpfr_init(r8164);
        mpfr_init(r8165);
        mpfr_init(r8166);
        mpfr_init(r8167);
        mpfr_init(r8168);
        mpfr_init(r8169);
        mpfr_init(r8170);
        mpfr_init(r8171);
        mpfr_init(r8172);
        mpfr_init_set_str(r8173, "0", 10, MPFR_RNDN);
        mpfr_init(r8174);
        mpfr_init(r8175);
        mpfr_init(r8176);
        mpfr_init(r8177);
        mpfr_init(r8178);
        mpfr_init_set_str(r8179, "2.5691413583745e-322", 10, MPFR_RNDN);
        mpfr_init(r8180);
        mpfr_init(r8181);
        mpfr_init(r8182);
        mpfr_init(r8183);
        mpfr_init(r8184);
        mpfr_init(r8185);
        mpfr_init(r8186);
        mpfr_init(r8187);
        mpfr_init(r8188);
        mpfr_init(r8189);
        mpfr_init(r8190);
        mpfr_init(r8191);
        mpfr_init(r8192);
        mpfr_init(r8193);
        mpfr_init(r8194);
        mpfr_init(r8195);
        mpfr_init(r8196);
        mpfr_init(r8197);
}

double f_fm(double n, double U, double t, double l, double Om, double U_) {
        ;
        mpfr_set_d(r8152, n, MPFR_RNDN);
        mpfr_mul(r8153, r8151, r8152, MPFR_RNDN);
        mpfr_set_d(r8154, U, MPFR_RNDN);
        mpfr_mul(r8155, r8153, r8154, MPFR_RNDN);
        ;
        mpfr_set_si(r8157, mpfr_cmp(r8155, r8156) <= 0, MPFR_RNDN);
        mpfr_mul(r8158, r8154, r8152, MPFR_RNDN);
        mpfr_mul(r8159, r8151, r8158, MPFR_RNDN);
        mpfr_set_d(r8160, U_, MPFR_RNDN);
        mpfr_sub(r8161, r8160, r8154, MPFR_RNDN);
        mpfr_set_d(r8162, l, MPFR_RNDN);
        mpfr_set_d(r8163, Om, MPFR_RNDN);
        mpfr_div(r8164, r8162, r8163, MPFR_RNDN);
        mpfr_mul(r8165, r8161, r8164, MPFR_RNDN);
        mpfr_mul(r8166, r8165, r8164, MPFR_RNDN);
        mpfr_set_d(r8167, t, MPFR_RNDN);
        mpfr_mul(r8168, r8162, r8151, MPFR_RNDN);
        mpfr_mul(r8169, r8168, r8164, MPFR_RNDN);
        mpfr_sub(r8170, r8167, r8169, MPFR_RNDN);
        mpfr_fma(r8171, r8166, r8152, r8170, MPFR_RNDN);
        mpfr_mul(r8172, r8159, r8171, MPFR_RNDN);
        ;
        mpfr_mul(r8174, r8173, r8152, MPFR_RNDN);
        mpfr_mul(r8175, r8154, r8151, MPFR_RNDN);
        mpfr_mul(r8176, r8174, r8175, MPFR_RNDN);
        mpfr_add(r8177, r8172, r8176, MPFR_RNDN);
        mpfr_sqrt(r8178, r8177, MPFR_RNDN);
        ;
        mpfr_set_si(r8180, mpfr_cmp(r8155, r8179) <= 0, MPFR_RNDN);
        mpfr_mul(r8181, r8162, r8162, MPFR_RNDN);
        mpfr_div(r8182, r8181, r8163, MPFR_RNDN);
        mpfr_mul(r8183, r8151, r8182, MPFR_RNDN);
        mpfr_sub(r8184, r8167, r8183, MPFR_RNDN);
        mpfr_pow(r8185, r8164, r8151, MPFR_RNDN);
        mpfr_mul(r8186, r8152, r8185, MPFR_RNDN);
        mpfr_sub(r8187, r8154, r8160, MPFR_RNDN);
        mpfr_mul(r8188, r8186, r8187, MPFR_RNDN);
        mpfr_sub(r8189, r8184, r8188, MPFR_RNDN);
        mpfr_mul(r8190, r8154, r8189, MPFR_RNDN);
        mpfr_mul(r8191, r8153, r8190, MPFR_RNDN);
        mpfr_sqrt(r8192, r8191, MPFR_RNDN);
        mpfr_sqrt(r8193, r8155, MPFR_RNDN);
        mpfr_sqrt(r8194, r8189, MPFR_RNDN);
        mpfr_mul(r8195, r8193, r8194, MPFR_RNDN);
        if (mpfr_get_si(r8180, MPFR_RNDN)) { mpfr_set(r8196, r8192, MPFR_RNDN); } else { mpfr_set(r8196, r8195, MPFR_RNDN); };
        if (mpfr_get_si(r8157, MPFR_RNDN)) { mpfr_set(r8197, r8178, MPFR_RNDN); } else { mpfr_set(r8197, r8196, MPFR_RNDN); };
        return mpfr_get_d(r8197, MPFR_RNDN);
}

static mpfr_t r8198, r8199, r8200, r8201, r8202, r8203, r8204, r8205, r8206, r8207, r8208, r8209, r8210, r8211, r8212, r8213, r8214, r8215, r8216, r8217, r8218, r8219, r8220, r8221, r8222, r8223, r8224, r8225, r8226, r8227, r8228, r8229, r8230, r8231, r8232, r8233, r8234, r8235, r8236, r8237, r8238, r8239, r8240, r8241, r8242, r8243, r8244;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8198, "2", 10, MPFR_RNDN);
        mpfr_init(r8199);
        mpfr_init(r8200);
        mpfr_init(r8201);
        mpfr_init(r8202);
        mpfr_init_set_str(r8203, "-1.0924168687415648e-300", 10, MPFR_RNDN);
        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(r8212);
        mpfr_init(r8213);
        mpfr_init(r8214);
        mpfr_init(r8215);
        mpfr_init(r8216);
        mpfr_init(r8217);
        mpfr_init(r8218);
        mpfr_init(r8219);
        mpfr_init_set_str(r8220, "0", 10, MPFR_RNDN);
        mpfr_init(r8221);
        mpfr_init(r8222);
        mpfr_init(r8223);
        mpfr_init(r8224);
        mpfr_init(r8225);
        mpfr_init_set_str(r8226, "2.5691413583745e-322", 10, MPFR_RNDN);
        mpfr_init(r8227);
        mpfr_init(r8228);
        mpfr_init(r8229);
        mpfr_init(r8230);
        mpfr_init(r8231);
        mpfr_init(r8232);
        mpfr_init(r8233);
        mpfr_init(r8234);
        mpfr_init(r8235);
        mpfr_init(r8236);
        mpfr_init(r8237);
        mpfr_init(r8238);
        mpfr_init(r8239);
        mpfr_init(r8240);
        mpfr_init(r8241);
        mpfr_init(r8242);
        mpfr_init(r8243);
        mpfr_init(r8244);
}

double f_dm(double n, double U, double t, double l, double Om, double U_) {
        ;
        mpfr_set_d(r8199, n, MPFR_RNDN);
        mpfr_mul(r8200, r8198, r8199, MPFR_RNDN);
        mpfr_set_d(r8201, U, MPFR_RNDN);
        mpfr_mul(r8202, r8200, r8201, MPFR_RNDN);
        ;
        mpfr_set_si(r8204, mpfr_cmp(r8202, r8203) <= 0, MPFR_RNDN);
        mpfr_mul(r8205, r8201, r8199, MPFR_RNDN);
        mpfr_mul(r8206, r8198, r8205, MPFR_RNDN);
        mpfr_set_d(r8207, U_, MPFR_RNDN);
        mpfr_sub(r8208, r8207, r8201, MPFR_RNDN);
        mpfr_set_d(r8209, l, MPFR_RNDN);
        mpfr_set_d(r8210, Om, MPFR_RNDN);
        mpfr_div(r8211, r8209, r8210, MPFR_RNDN);
        mpfr_mul(r8212, r8208, r8211, MPFR_RNDN);
        mpfr_mul(r8213, r8212, r8211, MPFR_RNDN);
        mpfr_set_d(r8214, t, MPFR_RNDN);
        mpfr_mul(r8215, r8209, r8198, MPFR_RNDN);
        mpfr_mul(r8216, r8215, r8211, MPFR_RNDN);
        mpfr_sub(r8217, r8214, r8216, MPFR_RNDN);
        mpfr_fma(r8218, r8213, r8199, r8217, MPFR_RNDN);
        mpfr_mul(r8219, r8206, r8218, MPFR_RNDN);
        ;
        mpfr_mul(r8221, r8220, r8199, MPFR_RNDN);
        mpfr_mul(r8222, r8201, r8198, MPFR_RNDN);
        mpfr_mul(r8223, r8221, r8222, MPFR_RNDN);
        mpfr_add(r8224, r8219, r8223, MPFR_RNDN);
        mpfr_sqrt(r8225, r8224, MPFR_RNDN);
        ;
        mpfr_set_si(r8227, mpfr_cmp(r8202, r8226) <= 0, MPFR_RNDN);
        mpfr_mul(r8228, r8209, r8209, MPFR_RNDN);
        mpfr_div(r8229, r8228, r8210, MPFR_RNDN);
        mpfr_mul(r8230, r8198, r8229, MPFR_RNDN);
        mpfr_sub(r8231, r8214, r8230, MPFR_RNDN);
        mpfr_pow(r8232, r8211, r8198, MPFR_RNDN);
        mpfr_mul(r8233, r8199, r8232, MPFR_RNDN);
        mpfr_sub(r8234, r8201, r8207, MPFR_RNDN);
        mpfr_mul(r8235, r8233, r8234, MPFR_RNDN);
        mpfr_sub(r8236, r8231, r8235, MPFR_RNDN);
        mpfr_mul(r8237, r8201, r8236, MPFR_RNDN);
        mpfr_mul(r8238, r8200, r8237, MPFR_RNDN);
        mpfr_sqrt(r8239, r8238, MPFR_RNDN);
        mpfr_sqrt(r8240, r8202, MPFR_RNDN);
        mpfr_sqrt(r8241, r8236, MPFR_RNDN);
        mpfr_mul(r8242, r8240, r8241, MPFR_RNDN);
        if (mpfr_get_si(r8227, MPFR_RNDN)) { mpfr_set(r8243, r8239, MPFR_RNDN); } else { mpfr_set(r8243, r8242, MPFR_RNDN); };
        if (mpfr_get_si(r8204, MPFR_RNDN)) { mpfr_set(r8244, r8225, MPFR_RNDN); } else { mpfr_set(r8244, r8243, MPFR_RNDN); };
        return mpfr_get_d(r8244, MPFR_RNDN);
}

