#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 r39230 = x;
        float r39231 = exp(r39230);
        float r39232 = 1;
        float r39233 = r39231 - r39232;
        float r39234 = r39231 / r39233;
        return r39234;
}

double f_id(double x) {
        double r39235 = x;
        double r39236 = exp(r39235);
        double r39237 = 1;
        double r39238 = r39236 - r39237;
        double r39239 = r39236 / r39238;
        return r39239;
}


double f_of(float x) {
        float r39240 = x;
        float r39241 = -0.002096270144711905;
        bool r39242 = r39240 <= r39241;
        float r39243 = 1;
        float r39244 = -r39240;
        float r39245 = exp(r39244);
        float r39246 = r39243 - r39245;
        float r39247 = r39243 / r39246;
        float r39248 = 0.0017641391526904671;
        bool r39249 = r39240 <= r39248;
        float r39250 = 1/2;
        float r39251 = r39243 / r39240;
        float r39252 = 1/12;
        float r39253 = r39252 * r39240;
        float r39254 = r39251 + r39253;
        float r39255 = r39250 + r39254;
        float r39256 = r39249 ? r39255 : r39247;
        float r39257 = r39242 ? r39247 : r39256;
        return r39257;
}

double f_od(double x) {
        double r39258 = x;
        double r39259 = -0.002096270144711905;
        bool r39260 = r39258 <= r39259;
        double r39261 = 1;
        double r39262 = -r39258;
        double r39263 = exp(r39262);
        double r39264 = r39261 - r39263;
        double r39265 = r39261 / r39264;
        double r39266 = 0.0017641391526904671;
        bool r39267 = r39258 <= r39266;
        double r39268 = 1/2;
        double r39269 = r39261 / r39258;
        double r39270 = 1/12;
        double r39271 = r39270 * r39258;
        double r39272 = r39269 + r39271;
        double r39273 = r39268 + r39272;
        double r39274 = r39267 ? r39273 : r39265;
        double r39275 = r39260 ? r39265 : r39274;
        return r39275;
}

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 r39276, r39277, r39278, r39279, r39280;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39276);
        mpfr_init(r39277);
        mpfr_init_set_str(r39278, "1", 10, MPFR_RNDN);
        mpfr_init(r39279);
        mpfr_init(r39280);
}

double f_im(double x) {
        mpfr_set_d(r39276, x, MPFR_RNDN);
        mpfr_exp(r39277, r39276, MPFR_RNDN);
        ;
        mpfr_sub(r39279, r39277, r39278, MPFR_RNDN);
        mpfr_div(r39280, r39277, r39279, MPFR_RNDN);
        return mpfr_get_d(r39280, MPFR_RNDN);
}

static mpfr_t r39281, r39282, r39283, r39284, r39285, r39286, r39287, r39288, r39289, r39290, r39291, r39292, r39293, r39294, r39295, r39296, r39297, r39298;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39281);
        mpfr_init_set_str(r39282, "-0.002096270144711905", 10, MPFR_RNDN);
        mpfr_init(r39283);
        mpfr_init_set_str(r39284, "1", 10, MPFR_RNDN);
        mpfr_init(r39285);
        mpfr_init(r39286);
        mpfr_init(r39287);
        mpfr_init(r39288);
        mpfr_init_set_str(r39289, "0.0017641391526904671", 10, MPFR_RNDN);
        mpfr_init(r39290);
        mpfr_init_set_str(r39291, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39292);
        mpfr_init_set_str(r39293, "1/12", 10, MPFR_RNDN);
        mpfr_init(r39294);
        mpfr_init(r39295);
        mpfr_init(r39296);
        mpfr_init(r39297);
        mpfr_init(r39298);
}

double f_fm(double x) {
        mpfr_set_d(r39281, x, MPFR_RNDN);
        ;
        mpfr_set_si(r39283, mpfr_cmp(r39281, r39282) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r39285, r39281, MPFR_RNDN);
        mpfr_exp(r39286, r39285, MPFR_RNDN);
        mpfr_sub(r39287, r39284, r39286, MPFR_RNDN);
        mpfr_div(r39288, r39284, r39287, MPFR_RNDN);
        ;
        mpfr_set_si(r39290, mpfr_cmp(r39281, r39289) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r39292, r39284, r39281, MPFR_RNDN);
        ;
        mpfr_mul(r39294, r39293, r39281, MPFR_RNDN);
        mpfr_add(r39295, r39292, r39294, MPFR_RNDN);
        mpfr_add(r39296, r39291, r39295, MPFR_RNDN);
        if (mpfr_get_si(r39290, MPFR_RNDN)) { mpfr_set(r39297, r39296, MPFR_RNDN); } else { mpfr_set(r39297, r39288, MPFR_RNDN); };
        if (mpfr_get_si(r39283, MPFR_RNDN)) { mpfr_set(r39298, r39288, MPFR_RNDN); } else { mpfr_set(r39298, r39297, MPFR_RNDN); };
        return mpfr_get_d(r39298, MPFR_RNDN);
}

static mpfr_t r39299, r39300, r39301, r39302, r39303, r39304, r39305, r39306, r39307, r39308, r39309, r39310, r39311, r39312, r39313, r39314, r39315, r39316;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39299);
        mpfr_init_set_str(r39300, "-0.002096270144711905", 10, MPFR_RNDN);
        mpfr_init(r39301);
        mpfr_init_set_str(r39302, "1", 10, MPFR_RNDN);
        mpfr_init(r39303);
        mpfr_init(r39304);
        mpfr_init(r39305);
        mpfr_init(r39306);
        mpfr_init_set_str(r39307, "0.0017641391526904671", 10, MPFR_RNDN);
        mpfr_init(r39308);
        mpfr_init_set_str(r39309, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39310);
        mpfr_init_set_str(r39311, "1/12", 10, MPFR_RNDN);
        mpfr_init(r39312);
        mpfr_init(r39313);
        mpfr_init(r39314);
        mpfr_init(r39315);
        mpfr_init(r39316);
}

double f_dm(double x) {
        mpfr_set_d(r39299, x, MPFR_RNDN);
        ;
        mpfr_set_si(r39301, mpfr_cmp(r39299, r39300) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r39303, r39299, MPFR_RNDN);
        mpfr_exp(r39304, r39303, MPFR_RNDN);
        mpfr_sub(r39305, r39302, r39304, MPFR_RNDN);
        mpfr_div(r39306, r39302, r39305, MPFR_RNDN);
        ;
        mpfr_set_si(r39308, mpfr_cmp(r39299, r39307) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r39310, r39302, r39299, MPFR_RNDN);
        ;
        mpfr_mul(r39312, r39311, r39299, MPFR_RNDN);
        mpfr_add(r39313, r39310, r39312, MPFR_RNDN);
        mpfr_add(r39314, r39309, r39313, MPFR_RNDN);
        if (mpfr_get_si(r39308, MPFR_RNDN)) { mpfr_set(r39315, r39314, MPFR_RNDN); } else { mpfr_set(r39315, r39306, MPFR_RNDN); };
        if (mpfr_get_si(r39301, MPFR_RNDN)) { mpfr_set(r39316, r39306, MPFR_RNDN); } else { mpfr_set(r39316, r39315, MPFR_RNDN); };
        return mpfr_get_d(r39316, MPFR_RNDN);
}

