#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 r39155 = x;
        float r39156 = exp(r39155);
        float r39157 = 1;
        float r39158 = r39156 - r39157;
        float r39159 = r39156 / r39158;
        return r39159;
}

double f_id(double x) {
        double r39160 = x;
        double r39161 = exp(r39160);
        double r39162 = 1;
        double r39163 = r39161 - r39162;
        double r39164 = r39161 / r39163;
        return r39164;
}


double f_of(float x) {
        float r39165 = x;
        float r39166 = -0.002096270144711905;
        bool r39167 = r39165 <= r39166;
        float r39168 = 1;
        float r39169 = -r39165;
        float r39170 = exp(r39169);
        float r39171 = r39168 - r39170;
        float r39172 = r39168 / r39171;
        float r39173 = 0.0017641391526904671;
        bool r39174 = r39165 <= r39173;
        float r39175 = 1/2;
        float r39176 = r39168 / r39165;
        float r39177 = 1/12;
        float r39178 = r39177 * r39165;
        float r39179 = r39176 + r39178;
        float r39180 = r39175 + r39179;
        float r39181 = r39174 ? r39180 : r39172;
        float r39182 = r39167 ? r39172 : r39181;
        return r39182;
}

double f_od(double x) {
        double r39183 = x;
        double r39184 = -0.002096270144711905;
        bool r39185 = r39183 <= r39184;
        double r39186 = 1;
        double r39187 = -r39183;
        double r39188 = exp(r39187);
        double r39189 = r39186 - r39188;
        double r39190 = r39186 / r39189;
        double r39191 = 0.0017641391526904671;
        bool r39192 = r39183 <= r39191;
        double r39193 = 1/2;
        double r39194 = r39186 / r39183;
        double r39195 = 1/12;
        double r39196 = r39195 * r39183;
        double r39197 = r39194 + r39196;
        double r39198 = r39193 + r39197;
        double r39199 = r39192 ? r39198 : r39190;
        double r39200 = r39185 ? r39190 : r39199;
        return r39200;
}

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 r39201, r39202, r39203, r39204, r39205;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39201);
        mpfr_init(r39202);
        mpfr_init_set_str(r39203, "1", 10, MPFR_RNDN);
        mpfr_init(r39204);
        mpfr_init(r39205);
}

double f_im(double x) {
        mpfr_set_d(r39201, x, MPFR_RNDN);
        mpfr_exp(r39202, r39201, MPFR_RNDN);
        ;
        mpfr_sub(r39204, r39202, r39203, MPFR_RNDN);
        mpfr_div(r39205, r39202, r39204, MPFR_RNDN);
        return mpfr_get_d(r39205, MPFR_RNDN);
}

static mpfr_t r39206, r39207, r39208, r39209, r39210, r39211, r39212, r39213, r39214, r39215, r39216, r39217, r39218, r39219, r39220, r39221, r39222, r39223;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39206);
        mpfr_init_set_str(r39207, "-0.002096270144711905", 10, MPFR_RNDN);
        mpfr_init(r39208);
        mpfr_init_set_str(r39209, "1", 10, MPFR_RNDN);
        mpfr_init(r39210);
        mpfr_init(r39211);
        mpfr_init(r39212);
        mpfr_init(r39213);
        mpfr_init_set_str(r39214, "0.0017641391526904671", 10, MPFR_RNDN);
        mpfr_init(r39215);
        mpfr_init_set_str(r39216, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39217);
        mpfr_init_set_str(r39218, "1/12", 10, MPFR_RNDN);
        mpfr_init(r39219);
        mpfr_init(r39220);
        mpfr_init(r39221);
        mpfr_init(r39222);
        mpfr_init(r39223);
}

double f_fm(double x) {
        mpfr_set_d(r39206, x, MPFR_RNDN);
        ;
        mpfr_set_si(r39208, mpfr_cmp(r39206, r39207) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r39210, r39206, MPFR_RNDN);
        mpfr_exp(r39211, r39210, MPFR_RNDN);
        mpfr_sub(r39212, r39209, r39211, MPFR_RNDN);
        mpfr_div(r39213, r39209, r39212, MPFR_RNDN);
        ;
        mpfr_set_si(r39215, mpfr_cmp(r39206, r39214) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r39217, r39209, r39206, MPFR_RNDN);
        ;
        mpfr_mul(r39219, r39218, r39206, MPFR_RNDN);
        mpfr_add(r39220, r39217, r39219, MPFR_RNDN);
        mpfr_add(r39221, r39216, r39220, MPFR_RNDN);
        if (mpfr_get_si(r39215, MPFR_RNDN)) { mpfr_set(r39222, r39221, MPFR_RNDN); } else { mpfr_set(r39222, r39213, MPFR_RNDN); };
        if (mpfr_get_si(r39208, MPFR_RNDN)) { mpfr_set(r39223, r39213, MPFR_RNDN); } else { mpfr_set(r39223, r39222, MPFR_RNDN); };
        return mpfr_get_d(r39223, MPFR_RNDN);
}

static mpfr_t r39224, r39225, r39226, r39227, r39228, r39229, r39230, r39231, r39232, r39233, r39234, r39235, r39236, r39237, r39238, r39239, r39240, r39241;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39224);
        mpfr_init_set_str(r39225, "-0.002096270144711905", 10, MPFR_RNDN);
        mpfr_init(r39226);
        mpfr_init_set_str(r39227, "1", 10, MPFR_RNDN);
        mpfr_init(r39228);
        mpfr_init(r39229);
        mpfr_init(r39230);
        mpfr_init(r39231);
        mpfr_init_set_str(r39232, "0.0017641391526904671", 10, MPFR_RNDN);
        mpfr_init(r39233);
        mpfr_init_set_str(r39234, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39235);
        mpfr_init_set_str(r39236, "1/12", 10, MPFR_RNDN);
        mpfr_init(r39237);
        mpfr_init(r39238);
        mpfr_init(r39239);
        mpfr_init(r39240);
        mpfr_init(r39241);
}

double f_dm(double x) {
        mpfr_set_d(r39224, x, MPFR_RNDN);
        ;
        mpfr_set_si(r39226, mpfr_cmp(r39224, r39225) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r39228, r39224, MPFR_RNDN);
        mpfr_exp(r39229, r39228, MPFR_RNDN);
        mpfr_sub(r39230, r39227, r39229, MPFR_RNDN);
        mpfr_div(r39231, r39227, r39230, MPFR_RNDN);
        ;
        mpfr_set_si(r39233, mpfr_cmp(r39224, r39232) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r39235, r39227, r39224, MPFR_RNDN);
        ;
        mpfr_mul(r39237, r39236, r39224, MPFR_RNDN);
        mpfr_add(r39238, r39235, r39237, MPFR_RNDN);
        mpfr_add(r39239, r39234, r39238, MPFR_RNDN);
        if (mpfr_get_si(r39233, MPFR_RNDN)) { mpfr_set(r39240, r39239, MPFR_RNDN); } else { mpfr_set(r39240, r39231, MPFR_RNDN); };
        if (mpfr_get_si(r39226, MPFR_RNDN)) { mpfr_set(r39241, r39231, MPFR_RNDN); } else { mpfr_set(r39241, r39240, MPFR_RNDN); };
        return mpfr_get_d(r39241, MPFR_RNDN);
}

