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

char *name = "expq2 (section 3.11)";

double f_if(float x) {
        float r38937 = x;
        float r38938 = exp(r38937);
        float r38939 = 1;
        float r38940 = r38938 - r38939;
        float r38941 = r38938 / r38940;
        return r38941;
}

double f_id(double x) {
        double r38942 = x;
        double r38943 = exp(r38942);
        double r38944 = 1;
        double r38945 = r38943 - r38944;
        double r38946 = r38943 / r38945;
        return r38946;
}


double f_of(float x) {
        float r38947 = x;
        float r38948 = -0.002096270144711905;
        bool r38949 = r38947 <= r38948;
        float r38950 = 1;
        float r38951 = -r38947;
        float r38952 = exp(r38951);
        float r38953 = r38950 - r38952;
        float r38954 = r38950 / r38953;
        float r38955 = 0.0017641391526904671;
        bool r38956 = r38947 <= r38955;
        float r38957 = 1/2;
        float r38958 = r38950 / r38947;
        float r38959 = 1/12;
        float r38960 = r38959 * r38947;
        float r38961 = r38958 + r38960;
        float r38962 = r38957 + r38961;
        float r38963 = r38956 ? r38962 : r38954;
        float r38964 = r38949 ? r38954 : r38963;
        return r38964;
}

double f_od(double x) {
        double r38965 = x;
        double r38966 = -0.002096270144711905;
        bool r38967 = r38965 <= r38966;
        double r38968 = 1;
        double r38969 = -r38965;
        double r38970 = exp(r38969);
        double r38971 = r38968 - r38970;
        double r38972 = r38968 / r38971;
        double r38973 = 0.0017641391526904671;
        bool r38974 = r38965 <= r38973;
        double r38975 = 1/2;
        double r38976 = r38968 / r38965;
        double r38977 = 1/12;
        double r38978 = r38977 * r38965;
        double r38979 = r38976 + r38978;
        double r38980 = r38975 + r38979;
        double r38981 = r38974 ? r38980 : r38972;
        double r38982 = r38967 ? r38972 : r38981;
        return r38982;
}

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 r38983, r38984, r38985, r38986, r38987;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r38983);
        mpfr_init(r38984);
        mpfr_init_set_str(r38985, "1", 10, MPFR_RNDN);
        mpfr_init(r38986);
        mpfr_init(r38987);
}

double f_im(double x) {
        mpfr_set_d(r38983, x, MPFR_RNDN);
        mpfr_exp(r38984, r38983, MPFR_RNDN);
        ;
        mpfr_sub(r38986, r38984, r38985, MPFR_RNDN);
        mpfr_div(r38987, r38984, r38986, MPFR_RNDN);
        return mpfr_get_d(r38987, MPFR_RNDN);
}

static mpfr_t r38988, r38989, r38990, r38991, r38992, r38993, r38994, r38995, r38996, r38997, r38998, r38999, r39000, r39001, r39002, r39003, r39004, r39005;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r38988);
        mpfr_init_set_str(r38989, "-0.002096270144711905", 10, MPFR_RNDN);
        mpfr_init(r38990);
        mpfr_init_set_str(r38991, "1", 10, MPFR_RNDN);
        mpfr_init(r38992);
        mpfr_init(r38993);
        mpfr_init(r38994);
        mpfr_init(r38995);
        mpfr_init_set_str(r38996, "0.0017641391526904671", 10, MPFR_RNDN);
        mpfr_init(r38997);
        mpfr_init_set_str(r38998, "1/2", 10, MPFR_RNDN);
        mpfr_init(r38999);
        mpfr_init_set_str(r39000, "1/12", 10, MPFR_RNDN);
        mpfr_init(r39001);
        mpfr_init(r39002);
        mpfr_init(r39003);
        mpfr_init(r39004);
        mpfr_init(r39005);
}

double f_fm(double x) {
        mpfr_set_d(r38988, x, MPFR_RNDN);
        ;
        mpfr_set_si(r38990, mpfr_cmp(r38988, r38989) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r38992, r38988, MPFR_RNDN);
        mpfr_exp(r38993, r38992, MPFR_RNDN);
        mpfr_sub(r38994, r38991, r38993, MPFR_RNDN);
        mpfr_div(r38995, r38991, r38994, MPFR_RNDN);
        ;
        mpfr_set_si(r38997, mpfr_cmp(r38988, r38996) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r38999, r38991, r38988, MPFR_RNDN);
        ;
        mpfr_mul(r39001, r39000, r38988, MPFR_RNDN);
        mpfr_add(r39002, r38999, r39001, MPFR_RNDN);
        mpfr_add(r39003, r38998, r39002, MPFR_RNDN);
        if (mpfr_get_si(r38997, MPFR_RNDN)) { mpfr_set(r39004, r39003, MPFR_RNDN); } else { mpfr_set(r39004, r38995, MPFR_RNDN); };
        if (mpfr_get_si(r38990, MPFR_RNDN)) { mpfr_set(r39005, r38995, MPFR_RNDN); } else { mpfr_set(r39005, r39004, MPFR_RNDN); };
        return mpfr_get_d(r39005, MPFR_RNDN);
}

static mpfr_t r39006, r39007, r39008, r39009, r39010, r39011, r39012, r39013, r39014, r39015, r39016, r39017, r39018, r39019, r39020, r39021, r39022, r39023;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39006);
        mpfr_init_set_str(r39007, "-0.002096270144711905", 10, MPFR_RNDN);
        mpfr_init(r39008);
        mpfr_init_set_str(r39009, "1", 10, MPFR_RNDN);
        mpfr_init(r39010);
        mpfr_init(r39011);
        mpfr_init(r39012);
        mpfr_init(r39013);
        mpfr_init_set_str(r39014, "0.0017641391526904671", 10, MPFR_RNDN);
        mpfr_init(r39015);
        mpfr_init_set_str(r39016, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39017);
        mpfr_init_set_str(r39018, "1/12", 10, MPFR_RNDN);
        mpfr_init(r39019);
        mpfr_init(r39020);
        mpfr_init(r39021);
        mpfr_init(r39022);
        mpfr_init(r39023);
}

double f_dm(double x) {
        mpfr_set_d(r39006, x, MPFR_RNDN);
        ;
        mpfr_set_si(r39008, mpfr_cmp(r39006, r39007) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r39010, r39006, MPFR_RNDN);
        mpfr_exp(r39011, r39010, MPFR_RNDN);
        mpfr_sub(r39012, r39009, r39011, MPFR_RNDN);
        mpfr_div(r39013, r39009, r39012, MPFR_RNDN);
        ;
        mpfr_set_si(r39015, mpfr_cmp(r39006, r39014) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r39017, r39009, r39006, MPFR_RNDN);
        ;
        mpfr_mul(r39019, r39018, r39006, MPFR_RNDN);
        mpfr_add(r39020, r39017, r39019, MPFR_RNDN);
        mpfr_add(r39021, r39016, r39020, MPFR_RNDN);
        if (mpfr_get_si(r39015, MPFR_RNDN)) { mpfr_set(r39022, r39021, MPFR_RNDN); } else { mpfr_set(r39022, r39013, MPFR_RNDN); };
        if (mpfr_get_si(r39008, MPFR_RNDN)) { mpfr_set(r39023, r39013, MPFR_RNDN); } else { mpfr_set(r39023, r39022, MPFR_RNDN); };
        return mpfr_get_d(r39023, MPFR_RNDN);
}

