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

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

double f_if(float x, float l, float t) {
        float r19968 = 2;
        float r19969 = sqrt(r19968);
        float r19970 = t;
        float r19971 = r19969 * r19970;
        float r19972 = x;
        float r19973 = 1;
        float r19974 = r19972 + r19973;
        float r19975 = r19972 - r19973;
        float r19976 = r19974 / r19975;
        float r19977 = l;
        float r19978 = r19977 * r19977;
        float r19979 = r19970 * r19970;
        float r19980 = r19968 * r19979;
        float r19981 = r19978 + r19980;
        float r19982 = r19976 * r19981;
        float r19983 = r19982 - r19978;
        float r19984 = sqrt(r19983);
        float r19985 = r19971 / r19984;
        return r19985;
}

double f_id(double x, double l, double t) {
        double r19986 = 2;
        double r19987 = sqrt(r19986);
        double r19988 = t;
        double r19989 = r19987 * r19988;
        double r19990 = x;
        double r19991 = 1;
        double r19992 = r19990 + r19991;
        double r19993 = r19990 - r19991;
        double r19994 = r19992 / r19993;
        double r19995 = l;
        double r19996 = r19995 * r19995;
        double r19997 = r19988 * r19988;
        double r19998 = r19986 * r19997;
        double r19999 = r19996 + r19998;
        double r20000 = r19994 * r19999;
        double r20001 = r20000 - r19996;
        double r20002 = sqrt(r20001);
        double r20003 = r19989 / r20002;
        return r20003;
}


double f_of(float x, float l, float t) {
        float r20004 = t;
        float r20005 = -9.551209580007774e+135;
        bool r20006 = r20004 <= r20005;
        float r20007 = 2;
        float r20008 = sqrt(r20007);
        float r20009 = r20004 * r20008;
        float r20010 = x;
        float r20011 = r20004 / r20010;
        float r20012 = r20011 / r20010;
        float r20013 = r20012 / r20008;
        float r20014 = r20013 - r20009;
        float r20015 = r20007 / r20010;
        float r20016 = r20015 / r20008;
        float r20017 = r20011 + r20004;
        float r20018 = r20016 * r20017;
        float r20019 = r20014 - r20018;
        float r20020 = r20009 / r20019;
        float r20021 = 6.64164782115949e+42;
        bool r20022 = r20004 <= r20021;
        float r20023 = 1;
        float r20024 = sqrt(r20023);
        float r20025 = r20008 / r20024;
        float r20026 = pow(r20004, r20007);
        float r20027 = r20007 * r20026;
        float r20028 = l;
        float r20029 = r20010 / r20028;
        float r20030 = r20028 / r20029;
        float r20031 = r20007 * r20030;
        float r20032 = 4;
        float r20033 = r20026 / r20010;
        float r20034 = r20032 * r20033;
        float r20035 = r20031 + r20034;
        float r20036 = r20027 + r20035;
        float r20037 = sqrt(r20036);
        float r20038 = r20004 / r20037;
        float r20039 = r20025 * r20038;
        float r20040 = r20018 + r20009;
        float r20041 = r20040 - r20013;
        float r20042 = r20009 / r20041;
        float r20043 = r20022 ? r20039 : r20042;
        float r20044 = r20006 ? r20020 : r20043;
        return r20044;
}

double f_od(double x, double l, double t) {
        double r20045 = t;
        double r20046 = -9.551209580007774e+135;
        bool r20047 = r20045 <= r20046;
        double r20048 = 2;
        double r20049 = sqrt(r20048);
        double r20050 = r20045 * r20049;
        double r20051 = x;
        double r20052 = r20045 / r20051;
        double r20053 = r20052 / r20051;
        double r20054 = r20053 / r20049;
        double r20055 = r20054 - r20050;
        double r20056 = r20048 / r20051;
        double r20057 = r20056 / r20049;
        double r20058 = r20052 + r20045;
        double r20059 = r20057 * r20058;
        double r20060 = r20055 - r20059;
        double r20061 = r20050 / r20060;
        double r20062 = 6.64164782115949e+42;
        bool r20063 = r20045 <= r20062;
        double r20064 = 1;
        double r20065 = sqrt(r20064);
        double r20066 = r20049 / r20065;
        double r20067 = pow(r20045, r20048);
        double r20068 = r20048 * r20067;
        double r20069 = l;
        double r20070 = r20051 / r20069;
        double r20071 = r20069 / r20070;
        double r20072 = r20048 * r20071;
        double r20073 = 4;
        double r20074 = r20067 / r20051;
        double r20075 = r20073 * r20074;
        double r20076 = r20072 + r20075;
        double r20077 = r20068 + r20076;
        double r20078 = sqrt(r20077);
        double r20079 = r20045 / r20078;
        double r20080 = r20066 * r20079;
        double r20081 = r20059 + r20050;
        double r20082 = r20081 - r20054;
        double r20083 = r20050 / r20082;
        double r20084 = r20063 ? r20080 : r20083;
        double r20085 = r20047 ? r20061 : r20084;
        return r20085;
}

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 r20086, r20087, r20088, r20089, r20090, r20091, r20092, r20093, r20094, r20095, r20096, r20097, r20098, r20099, r20100, r20101, r20102, r20103;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r20086, "2", 10, MPFR_RNDN);
        mpfr_init(r20087);
        mpfr_init(r20088);
        mpfr_init(r20089);
        mpfr_init(r20090);
        mpfr_init_set_str(r20091, "1", 10, MPFR_RNDN);
        mpfr_init(r20092);
        mpfr_init(r20093);
        mpfr_init(r20094);
        mpfr_init(r20095);
        mpfr_init(r20096);
        mpfr_init(r20097);
        mpfr_init(r20098);
        mpfr_init(r20099);
        mpfr_init(r20100);
        mpfr_init(r20101);
        mpfr_init(r20102);
        mpfr_init(r20103);
}

double f_im(double x, double l, double t) {
        ;
        mpfr_sqrt(r20087, r20086, MPFR_RNDN);
        mpfr_set_d(r20088, t, MPFR_RNDN);
        mpfr_mul(r20089, r20087, r20088, MPFR_RNDN);
        mpfr_set_d(r20090, x, MPFR_RNDN);
        ;
        mpfr_add(r20092, r20090, r20091, MPFR_RNDN);
        mpfr_sub(r20093, r20090, r20091, MPFR_RNDN);
        mpfr_div(r20094, r20092, r20093, MPFR_RNDN);
        mpfr_set_d(r20095, l, MPFR_RNDN);
        mpfr_mul(r20096, r20095, r20095, MPFR_RNDN);
        mpfr_mul(r20097, r20088, r20088, MPFR_RNDN);
        mpfr_mul(r20098, r20086, r20097, MPFR_RNDN);
        mpfr_add(r20099, r20096, r20098, MPFR_RNDN);
        mpfr_mul(r20100, r20094, r20099, MPFR_RNDN);
        mpfr_sub(r20101, r20100, r20096, MPFR_RNDN);
        mpfr_sqrt(r20102, r20101, MPFR_RNDN);
        mpfr_div(r20103, r20089, r20102, MPFR_RNDN);
        return mpfr_get_d(r20103, MPFR_RNDN);
}

static mpfr_t r20104, r20105, r20106, r20107, r20108, r20109, r20110, r20111, r20112, r20113, r20114, r20115, r20116, r20117, r20118, r20119, r20120, r20121, r20122, r20123, r20124, r20125, r20126, r20127, r20128, r20129, r20130, r20131, r20132, r20133, r20134, r20135, r20136, r20137, r20138, r20139, r20140, r20141, r20142, r20143, r20144;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20104);
        mpfr_init_set_str(r20105, "-9.551209580007774e+135", 10, MPFR_RNDN);
        mpfr_init(r20106);
        mpfr_init_set_str(r20107, "2", 10, MPFR_RNDN);
        mpfr_init(r20108);
        mpfr_init(r20109);
        mpfr_init(r20110);
        mpfr_init(r20111);
        mpfr_init(r20112);
        mpfr_init(r20113);
        mpfr_init(r20114);
        mpfr_init(r20115);
        mpfr_init(r20116);
        mpfr_init(r20117);
        mpfr_init(r20118);
        mpfr_init(r20119);
        mpfr_init(r20120);
        mpfr_init_set_str(r20121, "6.64164782115949e+42", 10, MPFR_RNDN);
        mpfr_init(r20122);
        mpfr_init_set_str(r20123, "1", 10, MPFR_RNDN);
        mpfr_init(r20124);
        mpfr_init(r20125);
        mpfr_init(r20126);
        mpfr_init(r20127);
        mpfr_init(r20128);
        mpfr_init(r20129);
        mpfr_init(r20130);
        mpfr_init(r20131);
        mpfr_init_set_str(r20132, "4", 10, MPFR_RNDN);
        mpfr_init(r20133);
        mpfr_init(r20134);
        mpfr_init(r20135);
        mpfr_init(r20136);
        mpfr_init(r20137);
        mpfr_init(r20138);
        mpfr_init(r20139);
        mpfr_init(r20140);
        mpfr_init(r20141);
        mpfr_init(r20142);
        mpfr_init(r20143);
        mpfr_init(r20144);
}

double f_fm(double x, double l, double t) {
        mpfr_set_d(r20104, t, MPFR_RNDN);
        ;
        mpfr_set_si(r20106, mpfr_cmp(r20104, r20105) <= 0, MPFR_RNDN);
        ;
        mpfr_sqrt(r20108, r20107, MPFR_RNDN);
        mpfr_mul(r20109, r20104, r20108, MPFR_RNDN);
        mpfr_set_d(r20110, x, MPFR_RNDN);
        mpfr_div(r20111, r20104, r20110, MPFR_RNDN);
        mpfr_div(r20112, r20111, r20110, MPFR_RNDN);
        mpfr_div(r20113, r20112, r20108, MPFR_RNDN);
        mpfr_sub(r20114, r20113, r20109, MPFR_RNDN);
        mpfr_div(r20115, r20107, r20110, MPFR_RNDN);
        mpfr_div(r20116, r20115, r20108, MPFR_RNDN);
        mpfr_add(r20117, r20111, r20104, MPFR_RNDN);
        mpfr_mul(r20118, r20116, r20117, MPFR_RNDN);
        mpfr_sub(r20119, r20114, r20118, MPFR_RNDN);
        mpfr_div(r20120, r20109, r20119, MPFR_RNDN);
        ;
        mpfr_set_si(r20122, mpfr_cmp(r20104, r20121) <= 0, MPFR_RNDN);
        ;
        mpfr_sqrt(r20124, r20123, MPFR_RNDN);
        mpfr_div(r20125, r20108, r20124, MPFR_RNDN);
        mpfr_pow(r20126, r20104, r20107, MPFR_RNDN);
        mpfr_mul(r20127, r20107, r20126, MPFR_RNDN);
        mpfr_set_d(r20128, l, MPFR_RNDN);
        mpfr_div(r20129, r20110, r20128, MPFR_RNDN);
        mpfr_div(r20130, r20128, r20129, MPFR_RNDN);
        mpfr_mul(r20131, r20107, r20130, MPFR_RNDN);
        ;
        mpfr_div(r20133, r20126, r20110, MPFR_RNDN);
        mpfr_mul(r20134, r20132, r20133, MPFR_RNDN);
        mpfr_add(r20135, r20131, r20134, MPFR_RNDN);
        mpfr_add(r20136, r20127, r20135, MPFR_RNDN);
        mpfr_sqrt(r20137, r20136, MPFR_RNDN);
        mpfr_div(r20138, r20104, r20137, MPFR_RNDN);
        mpfr_mul(r20139, r20125, r20138, MPFR_RNDN);
        mpfr_add(r20140, r20118, r20109, MPFR_RNDN);
        mpfr_sub(r20141, r20140, r20113, MPFR_RNDN);
        mpfr_div(r20142, r20109, r20141, MPFR_RNDN);
        if (mpfr_get_si(r20122, MPFR_RNDN)) { mpfr_set(r20143, r20139, MPFR_RNDN); } else { mpfr_set(r20143, r20142, MPFR_RNDN); };
        if (mpfr_get_si(r20106, MPFR_RNDN)) { mpfr_set(r20144, r20120, MPFR_RNDN); } else { mpfr_set(r20144, r20143, MPFR_RNDN); };
        return mpfr_get_d(r20144, MPFR_RNDN);
}

static mpfr_t r20145, r20146, r20147, r20148, r20149, r20150, r20151, r20152, r20153, r20154, r20155, r20156, r20157, r20158, r20159, r20160, r20161, r20162, r20163, r20164, r20165, r20166, r20167, r20168, r20169, r20170, r20171, r20172, r20173, r20174, r20175, r20176, r20177, r20178, r20179, r20180, r20181, r20182, r20183, r20184, r20185;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20145);
        mpfr_init_set_str(r20146, "-9.551209580007774e+135", 10, MPFR_RNDN);
        mpfr_init(r20147);
        mpfr_init_set_str(r20148, "2", 10, MPFR_RNDN);
        mpfr_init(r20149);
        mpfr_init(r20150);
        mpfr_init(r20151);
        mpfr_init(r20152);
        mpfr_init(r20153);
        mpfr_init(r20154);
        mpfr_init(r20155);
        mpfr_init(r20156);
        mpfr_init(r20157);
        mpfr_init(r20158);
        mpfr_init(r20159);
        mpfr_init(r20160);
        mpfr_init(r20161);
        mpfr_init_set_str(r20162, "6.64164782115949e+42", 10, MPFR_RNDN);
        mpfr_init(r20163);
        mpfr_init_set_str(r20164, "1", 10, MPFR_RNDN);
        mpfr_init(r20165);
        mpfr_init(r20166);
        mpfr_init(r20167);
        mpfr_init(r20168);
        mpfr_init(r20169);
        mpfr_init(r20170);
        mpfr_init(r20171);
        mpfr_init(r20172);
        mpfr_init_set_str(r20173, "4", 10, MPFR_RNDN);
        mpfr_init(r20174);
        mpfr_init(r20175);
        mpfr_init(r20176);
        mpfr_init(r20177);
        mpfr_init(r20178);
        mpfr_init(r20179);
        mpfr_init(r20180);
        mpfr_init(r20181);
        mpfr_init(r20182);
        mpfr_init(r20183);
        mpfr_init(r20184);
        mpfr_init(r20185);
}

double f_dm(double x, double l, double t) {
        mpfr_set_d(r20145, t, MPFR_RNDN);
        ;
        mpfr_set_si(r20147, mpfr_cmp(r20145, r20146) <= 0, MPFR_RNDN);
        ;
        mpfr_sqrt(r20149, r20148, MPFR_RNDN);
        mpfr_mul(r20150, r20145, r20149, MPFR_RNDN);
        mpfr_set_d(r20151, x, MPFR_RNDN);
        mpfr_div(r20152, r20145, r20151, MPFR_RNDN);
        mpfr_div(r20153, r20152, r20151, MPFR_RNDN);
        mpfr_div(r20154, r20153, r20149, MPFR_RNDN);
        mpfr_sub(r20155, r20154, r20150, MPFR_RNDN);
        mpfr_div(r20156, r20148, r20151, MPFR_RNDN);
        mpfr_div(r20157, r20156, r20149, MPFR_RNDN);
        mpfr_add(r20158, r20152, r20145, MPFR_RNDN);
        mpfr_mul(r20159, r20157, r20158, MPFR_RNDN);
        mpfr_sub(r20160, r20155, r20159, MPFR_RNDN);
        mpfr_div(r20161, r20150, r20160, MPFR_RNDN);
        ;
        mpfr_set_si(r20163, mpfr_cmp(r20145, r20162) <= 0, MPFR_RNDN);
        ;
        mpfr_sqrt(r20165, r20164, MPFR_RNDN);
        mpfr_div(r20166, r20149, r20165, MPFR_RNDN);
        mpfr_pow(r20167, r20145, r20148, MPFR_RNDN);
        mpfr_mul(r20168, r20148, r20167, MPFR_RNDN);
        mpfr_set_d(r20169, l, MPFR_RNDN);
        mpfr_div(r20170, r20151, r20169, MPFR_RNDN);
        mpfr_div(r20171, r20169, r20170, MPFR_RNDN);
        mpfr_mul(r20172, r20148, r20171, MPFR_RNDN);
        ;
        mpfr_div(r20174, r20167, r20151, MPFR_RNDN);
        mpfr_mul(r20175, r20173, r20174, MPFR_RNDN);
        mpfr_add(r20176, r20172, r20175, MPFR_RNDN);
        mpfr_add(r20177, r20168, r20176, MPFR_RNDN);
        mpfr_sqrt(r20178, r20177, MPFR_RNDN);
        mpfr_div(r20179, r20145, r20178, MPFR_RNDN);
        mpfr_mul(r20180, r20166, r20179, MPFR_RNDN);
        mpfr_add(r20181, r20159, r20150, MPFR_RNDN);
        mpfr_sub(r20182, r20181, r20154, MPFR_RNDN);
        mpfr_div(r20183, r20150, r20182, MPFR_RNDN);
        if (mpfr_get_si(r20163, MPFR_RNDN)) { mpfr_set(r20184, r20180, MPFR_RNDN); } else { mpfr_set(r20184, r20183, MPFR_RNDN); };
        if (mpfr_get_si(r20147, MPFR_RNDN)) { mpfr_set(r20185, r20161, MPFR_RNDN); } else { mpfr_set(r20185, r20184, MPFR_RNDN); };
        return mpfr_get_d(r20185, MPFR_RNDN);
}

