#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 r22921 = 2.0f;
        float r22922 = n;
        float r22923 = r22921 * r22922;
        float r22924 = U;
        float r22925 = r22923 * r22924;
        float r22926 = t;
        float r22927 = l;
        float r22928 = r22927 * r22927;
        float r22929 = Om;
        float r22930 = r22928 / r22929;
        float r22931 = r22921 * r22930;
        float r22932 = r22926 - r22931;
        float r22933 = r22927 / r22929;
        float r22934 = r22933 * r22933;
        float r22935 = r22922 * r22934;
        float r22936 = U_;
        float r22937 = r22924 - r22936;
        float r22938 = r22935 * r22937;
        float r22939 = r22932 - r22938;
        float r22940 = r22925 * r22939;
        float r22941 = sqrt(r22940);
        return r22941;
}

double f_id(double n, double U, double t, double l, double Om, double U_) {
        double r22942 = 2.0;
        double r22943 = n;
        double r22944 = r22942 * r22943;
        double r22945 = U;
        double r22946 = r22944 * r22945;
        double r22947 = t;
        double r22948 = l;
        double r22949 = r22948 * r22948;
        double r22950 = Om;
        double r22951 = r22949 / r22950;
        double r22952 = r22942 * r22951;
        double r22953 = r22947 - r22952;
        double r22954 = r22948 / r22950;
        double r22955 = r22954 * r22954;
        double r22956 = r22943 * r22955;
        double r22957 = U_;
        double r22958 = r22945 - r22957;
        double r22959 = r22956 * r22958;
        double r22960 = r22953 - r22959;
        double r22961 = r22946 * r22960;
        double r22962 = sqrt(r22961);
        return r22962;
}


double f_of(float n, float U, float t, float l, float Om, float U_) {
        float r22963 = n;
        float r22964 = 4.81969457196843e-296f;
        bool r22965 = r22963 <= r22964;
        float r22966 = 2.0f;
        float r22967 = r22966 * r22963;
        float r22968 = U;
        float r22969 = t;
        float r22970 = l;
        float r22971 = Om;
        float r22972 = r22971 / r22970;
        float r22973 = r22970 / r22972;
        float r22974 = r22966 * r22973;
        float r22975 = r22969 - r22974;
        float r22976 = r22970 / r22971;
        float r22977 = r22976 * r22976;
        float r22978 = r22963 * r22977;
        float r22979 = U_;
        float r22980 = r22968 - r22979;
        float r22981 = r22978 * r22980;
        float r22982 = r22975 - r22981;
        float r22983 = r22968 * r22982;
        float r22984 = r22967 * r22983;
        float r22985 = sqrt(r22984);
        float r22986 = sqrt(r22967);
        float r22987 = sqrt(r22983);
        float r22988 = r22986 * r22987;
        float r22989 = r22965 ? r22985 : r22988;
        return r22989;
}

double f_od(double n, double U, double t, double l, double Om, double U_) {
        double r22990 = n;
        double r22991 = 4.81969457196843e-296;
        bool r22992 = r22990 <= r22991;
        double r22993 = 2.0;
        double r22994 = r22993 * r22990;
        double r22995 = U;
        double r22996 = t;
        double r22997 = l;
        double r22998 = Om;
        double r22999 = r22998 / r22997;
        double r23000 = r22997 / r22999;
        double r23001 = r22993 * r23000;
        double r23002 = r22996 - r23001;
        double r23003 = r22997 / r22998;
        double r23004 = r23003 * r23003;
        double r23005 = r22990 * r23004;
        double r23006 = U_;
        double r23007 = r22995 - r23006;
        double r23008 = r23005 * r23007;
        double r23009 = r23002 - r23008;
        double r23010 = r22995 * r23009;
        double r23011 = r22994 * r23010;
        double r23012 = sqrt(r23011);
        double r23013 = sqrt(r22994);
        double r23014 = sqrt(r23010);
        double r23015 = r23013 * r23014;
        double r23016 = r22992 ? r23012 : r23015;
        return r23016;
}

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 r23017, r23018, r23019, r23020, r23021, r23022, r23023, r23024, r23025, r23026, r23027, r23028, r23029, r23030, r23031, r23032, r23033, r23034, r23035, r23036, r23037;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r23017, "2", 10, MPFR_RNDN);
        mpfr_init(r23018);
        mpfr_init(r23019);
        mpfr_init(r23020);
        mpfr_init(r23021);
        mpfr_init(r23022);
        mpfr_init(r23023);
        mpfr_init(r23024);
        mpfr_init(r23025);
        mpfr_init(r23026);
        mpfr_init(r23027);
        mpfr_init(r23028);
        mpfr_init(r23029);
        mpfr_init(r23030);
        mpfr_init(r23031);
        mpfr_init(r23032);
        mpfr_init(r23033);
        mpfr_init(r23034);
        mpfr_init(r23035);
        mpfr_init(r23036);
        mpfr_init(r23037);
}

double f_im(double n, double U, double t, double l, double Om, double U_) {
        ;
        mpfr_set_d(r23018, n, MPFR_RNDN);
        mpfr_mul(r23019, r23017, r23018, MPFR_RNDN);
        mpfr_set_d(r23020, U, MPFR_RNDN);
        mpfr_mul(r23021, r23019, r23020, MPFR_RNDN);
        mpfr_set_d(r23022, t, MPFR_RNDN);
        mpfr_set_d(r23023, l, MPFR_RNDN);
        mpfr_sqr(r23024, r23023, MPFR_RNDN);
        mpfr_set_d(r23025, Om, MPFR_RNDN);
        mpfr_div(r23026, r23024, r23025, MPFR_RNDN);
        mpfr_mul(r23027, r23017, r23026, MPFR_RNDN);
        mpfr_sub(r23028, r23022, r23027, MPFR_RNDN);
        mpfr_div(r23029, r23023, r23025, MPFR_RNDN);
        mpfr_sqr(r23030, r23029, MPFR_RNDN);
        mpfr_mul(r23031, r23018, r23030, MPFR_RNDN);
        mpfr_set_d(r23032, U_, MPFR_RNDN);
        mpfr_sub(r23033, r23020, r23032, MPFR_RNDN);
        mpfr_mul(r23034, r23031, r23033, MPFR_RNDN);
        mpfr_sub(r23035, r23028, r23034, MPFR_RNDN);
        mpfr_mul(r23036, r23021, r23035, MPFR_RNDN);
        mpfr_sqrt(r23037, r23036, MPFR_RNDN);
        return mpfr_get_d(r23037, MPFR_RNDN);
}

static mpfr_t r23038, r23039, r23040, r23041, r23042, r23043, r23044, r23045, r23046, r23047, r23048, r23049, r23050, r23051, r23052, r23053, r23054, r23055, r23056, r23057, r23058, r23059, r23060, r23061, r23062, r23063, r23064;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r23038);
        mpfr_init_set_str(r23039, "4.81969457196843e-296", 10, MPFR_RNDN);
        mpfr_init(r23040);
        mpfr_init_set_str(r23041, "2", 10, MPFR_RNDN);
        mpfr_init(r23042);
        mpfr_init(r23043);
        mpfr_init(r23044);
        mpfr_init(r23045);
        mpfr_init(r23046);
        mpfr_init(r23047);
        mpfr_init(r23048);
        mpfr_init(r23049);
        mpfr_init(r23050);
        mpfr_init(r23051);
        mpfr_init(r23052);
        mpfr_init(r23053);
        mpfr_init(r23054);
        mpfr_init(r23055);
        mpfr_init(r23056);
        mpfr_init(r23057);
        mpfr_init(r23058);
        mpfr_init(r23059);
        mpfr_init(r23060);
        mpfr_init(r23061);
        mpfr_init(r23062);
        mpfr_init(r23063);
        mpfr_init(r23064);
}

double f_fm(double n, double U, double t, double l, double Om, double U_) {
        mpfr_set_d(r23038, n, MPFR_RNDN);
        ;
        mpfr_set_si(r23040, mpfr_cmp(r23038, r23039) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r23042, r23041, r23038, MPFR_RNDN);
        mpfr_set_d(r23043, U, MPFR_RNDN);
        mpfr_set_d(r23044, t, MPFR_RNDN);
        mpfr_set_d(r23045, l, MPFR_RNDN);
        mpfr_set_d(r23046, Om, MPFR_RNDN);
        mpfr_div(r23047, r23046, r23045, MPFR_RNDN);
        mpfr_div(r23048, r23045, r23047, MPFR_RNDN);
        mpfr_mul(r23049, r23041, r23048, MPFR_RNDN);
        mpfr_sub(r23050, r23044, r23049, MPFR_RNDN);
        mpfr_div(r23051, r23045, r23046, MPFR_RNDN);
        mpfr_sqr(r23052, r23051, MPFR_RNDN);
        mpfr_mul(r23053, r23038, r23052, MPFR_RNDN);
        mpfr_set_d(r23054, U_, MPFR_RNDN);
        mpfr_sub(r23055, r23043, r23054, MPFR_RNDN);
        mpfr_mul(r23056, r23053, r23055, MPFR_RNDN);
        mpfr_sub(r23057, r23050, r23056, MPFR_RNDN);
        mpfr_mul(r23058, r23043, r23057, MPFR_RNDN);
        mpfr_mul(r23059, r23042, r23058, MPFR_RNDN);
        mpfr_sqrt(r23060, r23059, MPFR_RNDN);
        mpfr_sqrt(r23061, r23042, MPFR_RNDN);
        mpfr_sqrt(r23062, r23058, MPFR_RNDN);
        mpfr_mul(r23063, r23061, r23062, MPFR_RNDN);
        if (mpfr_get_si(r23040, MPFR_RNDN)) { mpfr_set(r23064, r23060, MPFR_RNDN); } else { mpfr_set(r23064, r23063, MPFR_RNDN); };
        return mpfr_get_d(r23064, MPFR_RNDN);
}

static mpfr_t r23065, r23066, r23067, r23068, r23069, r23070, r23071, r23072, r23073, r23074, r23075, r23076, r23077, r23078, r23079, r23080, r23081, r23082, r23083, r23084, r23085, r23086, r23087, r23088, r23089, r23090, r23091;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r23065);
        mpfr_init_set_str(r23066, "4.81969457196843e-296", 10, MPFR_RNDN);
        mpfr_init(r23067);
        mpfr_init_set_str(r23068, "2", 10, MPFR_RNDN);
        mpfr_init(r23069);
        mpfr_init(r23070);
        mpfr_init(r23071);
        mpfr_init(r23072);
        mpfr_init(r23073);
        mpfr_init(r23074);
        mpfr_init(r23075);
        mpfr_init(r23076);
        mpfr_init(r23077);
        mpfr_init(r23078);
        mpfr_init(r23079);
        mpfr_init(r23080);
        mpfr_init(r23081);
        mpfr_init(r23082);
        mpfr_init(r23083);
        mpfr_init(r23084);
        mpfr_init(r23085);
        mpfr_init(r23086);
        mpfr_init(r23087);
        mpfr_init(r23088);
        mpfr_init(r23089);
        mpfr_init(r23090);
        mpfr_init(r23091);
}

double f_dm(double n, double U, double t, double l, double Om, double U_) {
        mpfr_set_d(r23065, n, MPFR_RNDN);
        ;
        mpfr_set_si(r23067, mpfr_cmp(r23065, r23066) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r23069, r23068, r23065, MPFR_RNDN);
        mpfr_set_d(r23070, U, MPFR_RNDN);
        mpfr_set_d(r23071, t, MPFR_RNDN);
        mpfr_set_d(r23072, l, MPFR_RNDN);
        mpfr_set_d(r23073, Om, MPFR_RNDN);
        mpfr_div(r23074, r23073, r23072, MPFR_RNDN);
        mpfr_div(r23075, r23072, r23074, MPFR_RNDN);
        mpfr_mul(r23076, r23068, r23075, MPFR_RNDN);
        mpfr_sub(r23077, r23071, r23076, MPFR_RNDN);
        mpfr_div(r23078, r23072, r23073, MPFR_RNDN);
        mpfr_sqr(r23079, r23078, MPFR_RNDN);
        mpfr_mul(r23080, r23065, r23079, MPFR_RNDN);
        mpfr_set_d(r23081, U_, MPFR_RNDN);
        mpfr_sub(r23082, r23070, r23081, MPFR_RNDN);
        mpfr_mul(r23083, r23080, r23082, MPFR_RNDN);
        mpfr_sub(r23084, r23077, r23083, MPFR_RNDN);
        mpfr_mul(r23085, r23070, r23084, MPFR_RNDN);
        mpfr_mul(r23086, r23069, r23085, MPFR_RNDN);
        mpfr_sqrt(r23087, r23086, MPFR_RNDN);
        mpfr_sqrt(r23088, r23069, MPFR_RNDN);
        mpfr_sqrt(r23089, r23085, MPFR_RNDN);
        mpfr_mul(r23090, r23088, r23089, MPFR_RNDN);
        if (mpfr_get_si(r23067, MPFR_RNDN)) { mpfr_set(r23091, r23087, MPFR_RNDN); } else { mpfr_set(r23091, r23090, MPFR_RNDN); };
        return mpfr_get_d(r23091, MPFR_RNDN);
}

