#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 r4417117 = x;
        float r4417118 = exp(r4417117);
        float r4417119 = 1;
        float r4417120 = r4417118 - r4417119;
        float r4417121 = r4417118 / r4417120;
        return r4417121;
}

double f_id(double x) {
        double r4417122 = x;
        double r4417123 = exp(r4417122);
        double r4417124 = 1;
        double r4417125 = r4417123 - r4417124;
        double r4417126 = r4417123 / r4417125;
        return r4417126;
}


double f_of(float x) {
        float r4417127 = x;
        float r4417128 = -7.875172610670247e-05;
        bool r4417129 = r4417127 <= r4417128;
        float r4417130 = exp(r4417127);
        float r4417131 = 1;
        float r4417132 = r4417130 - r4417131;
        float r4417133 = r4417130 / r4417132;
        float r4417134 = cbrt(r4417133);
        float r4417135 = r4417134 * r4417134;
        float r4417136 = r4417135 * r4417134;
        float r4417137 = 1/2;
        float r4417138 = r4417131 / r4417127;
        float r4417139 = 1/12;
        float r4417140 = r4417139 * r4417127;
        float r4417141 = r4417138 + r4417140;
        float r4417142 = r4417137 + r4417141;
        float r4417143 = r4417129 ? r4417136 : r4417142;
        return r4417143;
}

double f_od(double x) {
        double r4417144 = x;
        double r4417145 = -7.875172610670247e-05;
        bool r4417146 = r4417144 <= r4417145;
        double r4417147 = exp(r4417144);
        double r4417148 = 1;
        double r4417149 = r4417147 - r4417148;
        double r4417150 = r4417147 / r4417149;
        double r4417151 = cbrt(r4417150);
        double r4417152 = r4417151 * r4417151;
        double r4417153 = r4417152 * r4417151;
        double r4417154 = 1/2;
        double r4417155 = r4417148 / r4417144;
        double r4417156 = 1/12;
        double r4417157 = r4417156 * r4417144;
        double r4417158 = r4417155 + r4417157;
        double r4417159 = r4417154 + r4417158;
        double r4417160 = r4417146 ? r4417153 : r4417159;
        return r4417160;
}

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 r4417161, r4417162, r4417163, r4417164, r4417165;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4417161);
        mpfr_init(r4417162);
        mpfr_init_set_str(r4417163, "1", 10, MPFR_RNDN);
        mpfr_init(r4417164);
        mpfr_init(r4417165);
}

double f_im(double x) {
        mpfr_set_d(r4417161, x, MPFR_RNDN);
        mpfr_exp(r4417162, r4417161, MPFR_RNDN);
        ;
        mpfr_sub(r4417164, r4417162, r4417163, MPFR_RNDN);
        mpfr_div(r4417165, r4417162, r4417164, MPFR_RNDN);
        return mpfr_get_d(r4417165, MPFR_RNDN);
}

static mpfr_t r4417166, r4417167, r4417168, r4417169, r4417170, r4417171, r4417172, r4417173, r4417174, r4417175, r4417176, r4417177, r4417178, r4417179, r4417180, r4417181, r4417182;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4417166);
        mpfr_init_set_str(r4417167, "-7.875172610670247e-05", 10, MPFR_RNDN);
        mpfr_init(r4417168);
        mpfr_init(r4417169);
        mpfr_init_set_str(r4417170, "1", 10, MPFR_RNDN);
        mpfr_init(r4417171);
        mpfr_init(r4417172);
        mpfr_init(r4417173);
        mpfr_init(r4417174);
        mpfr_init(r4417175);
        mpfr_init_set_str(r4417176, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4417177);
        mpfr_init_set_str(r4417178, "1/12", 10, MPFR_RNDN);
        mpfr_init(r4417179);
        mpfr_init(r4417180);
        mpfr_init(r4417181);
        mpfr_init(r4417182);
}

double f_fm(double x) {
        mpfr_set_d(r4417166, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4417168, mpfr_cmp(r4417166, r4417167) <= 0, MPFR_RNDN);
        mpfr_exp(r4417169, r4417166, MPFR_RNDN);
        ;
        mpfr_sub(r4417171, r4417169, r4417170, MPFR_RNDN);
        mpfr_div(r4417172, r4417169, r4417171, MPFR_RNDN);
        mpfr_cbrt(r4417173, r4417172, MPFR_RNDN);
        mpfr_mul(r4417174, r4417173, r4417173, MPFR_RNDN);
        mpfr_mul(r4417175, r4417174, r4417173, MPFR_RNDN);
        ;
        mpfr_div(r4417177, r4417170, r4417166, MPFR_RNDN);
        ;
        mpfr_mul(r4417179, r4417178, r4417166, MPFR_RNDN);
        mpfr_add(r4417180, r4417177, r4417179, MPFR_RNDN);
        mpfr_add(r4417181, r4417176, r4417180, MPFR_RNDN);
        if (mpfr_get_si(r4417168, MPFR_RNDN)) { mpfr_set(r4417182, r4417175, MPFR_RNDN); } else { mpfr_set(r4417182, r4417181, MPFR_RNDN); };
        return mpfr_get_d(r4417182, MPFR_RNDN);
}

static mpfr_t r4417183, r4417184, r4417185, r4417186, r4417187, r4417188, r4417189, r4417190, r4417191, r4417192, r4417193, r4417194, r4417195, r4417196, r4417197, r4417198, r4417199;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4417183);
        mpfr_init_set_str(r4417184, "-7.875172610670247e-05", 10, MPFR_RNDN);
        mpfr_init(r4417185);
        mpfr_init(r4417186);
        mpfr_init_set_str(r4417187, "1", 10, MPFR_RNDN);
        mpfr_init(r4417188);
        mpfr_init(r4417189);
        mpfr_init(r4417190);
        mpfr_init(r4417191);
        mpfr_init(r4417192);
        mpfr_init_set_str(r4417193, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4417194);
        mpfr_init_set_str(r4417195, "1/12", 10, MPFR_RNDN);
        mpfr_init(r4417196);
        mpfr_init(r4417197);
        mpfr_init(r4417198);
        mpfr_init(r4417199);
}

double f_dm(double x) {
        mpfr_set_d(r4417183, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4417185, mpfr_cmp(r4417183, r4417184) <= 0, MPFR_RNDN);
        mpfr_exp(r4417186, r4417183, MPFR_RNDN);
        ;
        mpfr_sub(r4417188, r4417186, r4417187, MPFR_RNDN);
        mpfr_div(r4417189, r4417186, r4417188, MPFR_RNDN);
        mpfr_cbrt(r4417190, r4417189, MPFR_RNDN);
        mpfr_mul(r4417191, r4417190, r4417190, MPFR_RNDN);
        mpfr_mul(r4417192, r4417191, r4417190, MPFR_RNDN);
        ;
        mpfr_div(r4417194, r4417187, r4417183, MPFR_RNDN);
        ;
        mpfr_mul(r4417196, r4417195, r4417183, MPFR_RNDN);
        mpfr_add(r4417197, r4417194, r4417196, MPFR_RNDN);
        mpfr_add(r4417198, r4417193, r4417197, MPFR_RNDN);
        if (mpfr_get_si(r4417185, MPFR_RNDN)) { mpfr_set(r4417199, r4417192, MPFR_RNDN); } else { mpfr_set(r4417199, r4417198, MPFR_RNDN); };
        return mpfr_get_d(r4417199, MPFR_RNDN);
}

