#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 r39067 = x;
        float r39068 = exp(r39067);
        float r39069 = 1;
        float r39070 = r39068 - r39069;
        float r39071 = r39068 / r39070;
        return r39071;
}

double f_id(double x) {
        double r39072 = x;
        double r39073 = exp(r39072);
        double r39074 = 1;
        double r39075 = r39073 - r39074;
        double r39076 = r39073 / r39075;
        return r39076;
}


double f_of(float x) {
        float r39077 = x;
        float r39078 = -3.979550813088296e-22;
        bool r39079 = r39077 <= r39078;
        float r39080 = 1;
        float r39081 = -r39077;
        float r39082 = exp(r39081);
        float r39083 = r39080 - r39082;
        float r39084 = r39080 / r39083;
        float r39085 = 0.802860764679358;
        bool r39086 = r39077 <= r39085;
        float r39087 = 1/2;
        float r39088 = r39080 / r39077;
        float r39089 = 1/12;
        float r39090 = r39089 * r39077;
        float r39091 = r39088 + r39090;
        float r39092 = r39087 + r39091;
        float r39093 = r39086 ? r39092 : r39084;
        float r39094 = r39079 ? r39084 : r39093;
        return r39094;
}

double f_od(double x) {
        double r39095 = x;
        double r39096 = -3.979550813088296e-22;
        bool r39097 = r39095 <= r39096;
        double r39098 = 1;
        double r39099 = -r39095;
        double r39100 = exp(r39099);
        double r39101 = r39098 - r39100;
        double r39102 = r39098 / r39101;
        double r39103 = 0.802860764679358;
        bool r39104 = r39095 <= r39103;
        double r39105 = 1/2;
        double r39106 = r39098 / r39095;
        double r39107 = 1/12;
        double r39108 = r39107 * r39095;
        double r39109 = r39106 + r39108;
        double r39110 = r39105 + r39109;
        double r39111 = r39104 ? r39110 : r39102;
        double r39112 = r39097 ? r39102 : r39111;
        return r39112;
}

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 r39113, r39114, r39115, r39116, r39117;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39113);
        mpfr_init(r39114);
        mpfr_init_set_str(r39115, "1", 10, MPFR_RNDN);
        mpfr_init(r39116);
        mpfr_init(r39117);
}

double f_im(double x) {
        mpfr_set_d(r39113, x, MPFR_RNDN);
        mpfr_exp(r39114, r39113, MPFR_RNDN);
        ;
        mpfr_sub(r39116, r39114, r39115, MPFR_RNDN);
        mpfr_div(r39117, r39114, r39116, MPFR_RNDN);
        return mpfr_get_d(r39117, MPFR_RNDN);
}

static mpfr_t r39118, r39119, r39120, r39121, r39122, r39123, r39124, r39125, r39126, r39127, r39128, r39129, r39130, r39131, r39132, r39133, r39134, r39135;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39118);
        mpfr_init_set_str(r39119, "-3.979550813088296e-22", 10, MPFR_RNDN);
        mpfr_init(r39120);
        mpfr_init_set_str(r39121, "1", 10, MPFR_RNDN);
        mpfr_init(r39122);
        mpfr_init(r39123);
        mpfr_init(r39124);
        mpfr_init(r39125);
        mpfr_init_set_str(r39126, "0.802860764679358", 10, MPFR_RNDN);
        mpfr_init(r39127);
        mpfr_init_set_str(r39128, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39129);
        mpfr_init_set_str(r39130, "1/12", 10, MPFR_RNDN);
        mpfr_init(r39131);
        mpfr_init(r39132);
        mpfr_init(r39133);
        mpfr_init(r39134);
        mpfr_init(r39135);
}

double f_fm(double x) {
        mpfr_set_d(r39118, x, MPFR_RNDN);
        ;
        mpfr_set_si(r39120, mpfr_cmp(r39118, r39119) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r39122, r39118, MPFR_RNDN);
        mpfr_exp(r39123, r39122, MPFR_RNDN);
        mpfr_sub(r39124, r39121, r39123, MPFR_RNDN);
        mpfr_div(r39125, r39121, r39124, MPFR_RNDN);
        ;
        mpfr_set_si(r39127, mpfr_cmp(r39118, r39126) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r39129, r39121, r39118, MPFR_RNDN);
        ;
        mpfr_mul(r39131, r39130, r39118, MPFR_RNDN);
        mpfr_add(r39132, r39129, r39131, MPFR_RNDN);
        mpfr_add(r39133, r39128, r39132, MPFR_RNDN);
        if (mpfr_get_si(r39127, MPFR_RNDN)) { mpfr_set(r39134, r39133, MPFR_RNDN); } else { mpfr_set(r39134, r39125, MPFR_RNDN); };
        if (mpfr_get_si(r39120, MPFR_RNDN)) { mpfr_set(r39135, r39125, MPFR_RNDN); } else { mpfr_set(r39135, r39134, MPFR_RNDN); };
        return mpfr_get_d(r39135, MPFR_RNDN);
}

static mpfr_t r39136, r39137, r39138, r39139, r39140, r39141, r39142, r39143, r39144, r39145, r39146, r39147, r39148, r39149, r39150, r39151, r39152, r39153;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39136);
        mpfr_init_set_str(r39137, "-3.979550813088296e-22", 10, MPFR_RNDN);
        mpfr_init(r39138);
        mpfr_init_set_str(r39139, "1", 10, MPFR_RNDN);
        mpfr_init(r39140);
        mpfr_init(r39141);
        mpfr_init(r39142);
        mpfr_init(r39143);
        mpfr_init_set_str(r39144, "0.802860764679358", 10, MPFR_RNDN);
        mpfr_init(r39145);
        mpfr_init_set_str(r39146, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39147);
        mpfr_init_set_str(r39148, "1/12", 10, MPFR_RNDN);
        mpfr_init(r39149);
        mpfr_init(r39150);
        mpfr_init(r39151);
        mpfr_init(r39152);
        mpfr_init(r39153);
}

double f_dm(double x) {
        mpfr_set_d(r39136, x, MPFR_RNDN);
        ;
        mpfr_set_si(r39138, mpfr_cmp(r39136, r39137) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r39140, r39136, MPFR_RNDN);
        mpfr_exp(r39141, r39140, MPFR_RNDN);
        mpfr_sub(r39142, r39139, r39141, MPFR_RNDN);
        mpfr_div(r39143, r39139, r39142, MPFR_RNDN);
        ;
        mpfr_set_si(r39145, mpfr_cmp(r39136, r39144) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r39147, r39139, r39136, MPFR_RNDN);
        ;
        mpfr_mul(r39149, r39148, r39136, MPFR_RNDN);
        mpfr_add(r39150, r39147, r39149, MPFR_RNDN);
        mpfr_add(r39151, r39146, r39150, MPFR_RNDN);
        if (mpfr_get_si(r39145, MPFR_RNDN)) { mpfr_set(r39152, r39151, MPFR_RNDN); } else { mpfr_set(r39152, r39143, MPFR_RNDN); };
        if (mpfr_get_si(r39138, MPFR_RNDN)) { mpfr_set(r39153, r39143, MPFR_RNDN); } else { mpfr_set(r39153, r39152, MPFR_RNDN); };
        return mpfr_get_d(r39153, MPFR_RNDN);
}

