#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 r10637 = x;
        float r10638 = exp(r10637);
        float r10639 = 1;
        float r10640 = r10638 - r10639;
        float r10641 = r10638 / r10640;
        return r10641;
}

double f_id(double x) {
        double r10642 = x;
        double r10643 = exp(r10642);
        double r10644 = 1;
        double r10645 = r10643 - r10644;
        double r10646 = r10643 / r10645;
        return r10646;
}


double f_of(float x) {
        float r10647 = x;
        float r10648 = exp(r10647);
        float r10649 = -r10648;
        float r10650 = 1;
        float r10651 = r10650 - r10648;
        float r10652 = r10649 / r10651;
        float r10653 = -0.055826681054801125;
        bool r10654 = r10652 <= r10653;
        float r10655 = 1/12;
        float r10656 = r10655 * r10647;
        float r10657 = r10650 / r10647;
        float r10658 = 1/2;
        float r10659 = r10657 + r10658;
        float r10660 = r10656 + r10659;
        float r10661 = 315.02294367585023;
        bool r10662 = r10652 <= r10661;
        float r10663 = r10662 ? r10652 : r10660;
        float r10664 = r10654 ? r10660 : r10663;
        return r10664;
}

double f_od(double x) {
        double r10665 = x;
        double r10666 = exp(r10665);
        double r10667 = -r10666;
        double r10668 = 1;
        double r10669 = r10668 - r10666;
        double r10670 = r10667 / r10669;
        double r10671 = -0.055826681054801125;
        bool r10672 = r10670 <= r10671;
        double r10673 = 1/12;
        double r10674 = r10673 * r10665;
        double r10675 = r10668 / r10665;
        double r10676 = 1/2;
        double r10677 = r10675 + r10676;
        double r10678 = r10674 + r10677;
        double r10679 = 315.02294367585023;
        bool r10680 = r10670 <= r10679;
        double r10681 = r10680 ? r10670 : r10678;
        double r10682 = r10672 ? r10678 : r10681;
        return r10682;
}

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 r10683, r10684, r10685, r10686, r10687;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10683);
        mpfr_init(r10684);
        mpfr_init_set_str(r10685, "1", 10, MPFR_RNDN);
        mpfr_init(r10686);
        mpfr_init(r10687);
}

double f_im(double x) {
        mpfr_set_d(r10683, x, MPFR_RNDN);
        mpfr_exp(r10684, r10683, MPFR_RNDN);
        ;
        mpfr_sub(r10686, r10684, r10685, MPFR_RNDN);
        mpfr_div(r10687, r10684, r10686, MPFR_RNDN);
        return mpfr_get_d(r10687, MPFR_RNDN);
}

static mpfr_t r10688, r10689, r10690, r10691, r10692, r10693, r10694, r10695, r10696, r10697, r10698, r10699, r10700, r10701, r10702, r10703, r10704, r10705;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10688);
        mpfr_init(r10689);
        mpfr_init(r10690);
        mpfr_init_set_str(r10691, "1", 10, MPFR_RNDN);
        mpfr_init(r10692);
        mpfr_init(r10693);
        mpfr_init_set_str(r10694, "-0.055826681054801125", 10, MPFR_RNDN);
        mpfr_init(r10695);
        mpfr_init_set_str(r10696, "1/12", 10, MPFR_RNDN);
        mpfr_init(r10697);
        mpfr_init(r10698);
        mpfr_init_set_str(r10699, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10700);
        mpfr_init(r10701);
        mpfr_init_set_str(r10702, "315.02294367585023", 10, MPFR_RNDN);
        mpfr_init(r10703);
        mpfr_init(r10704);
        mpfr_init(r10705);
}

double f_fm(double x) {
        mpfr_set_d(r10688, x, MPFR_RNDN);
        mpfr_exp(r10689, r10688, MPFR_RNDN);
        mpfr_neg(r10690, r10689, MPFR_RNDN);
        ;
        mpfr_sub(r10692, r10691, r10689, MPFR_RNDN);
        mpfr_div(r10693, r10690, r10692, MPFR_RNDN);
        ;
        mpfr_set_si(r10695, mpfr_cmp(r10693, r10694) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r10697, r10696, r10688, MPFR_RNDN);
        mpfr_div(r10698, r10691, r10688, MPFR_RNDN);
        ;
        mpfr_add(r10700, r10698, r10699, MPFR_RNDN);
        mpfr_add(r10701, r10697, r10700, MPFR_RNDN);
        ;
        mpfr_set_si(r10703, mpfr_cmp(r10693, r10702) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r10703, MPFR_RNDN)) { mpfr_set(r10704, r10693, MPFR_RNDN); } else { mpfr_set(r10704, r10701, MPFR_RNDN); };
        if (mpfr_get_si(r10695, MPFR_RNDN)) { mpfr_set(r10705, r10701, MPFR_RNDN); } else { mpfr_set(r10705, r10704, MPFR_RNDN); };
        return mpfr_get_d(r10705, MPFR_RNDN);
}

static mpfr_t r10706, r10707, r10708, r10709, r10710, r10711, r10712, r10713, r10714, r10715, r10716, r10717, r10718, r10719, r10720, r10721, r10722, r10723;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10706);
        mpfr_init(r10707);
        mpfr_init(r10708);
        mpfr_init_set_str(r10709, "1", 10, MPFR_RNDN);
        mpfr_init(r10710);
        mpfr_init(r10711);
        mpfr_init_set_str(r10712, "-0.055826681054801125", 10, MPFR_RNDN);
        mpfr_init(r10713);
        mpfr_init_set_str(r10714, "1/12", 10, MPFR_RNDN);
        mpfr_init(r10715);
        mpfr_init(r10716);
        mpfr_init_set_str(r10717, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10718);
        mpfr_init(r10719);
        mpfr_init_set_str(r10720, "315.02294367585023", 10, MPFR_RNDN);
        mpfr_init(r10721);
        mpfr_init(r10722);
        mpfr_init(r10723);
}

double f_dm(double x) {
        mpfr_set_d(r10706, x, MPFR_RNDN);
        mpfr_exp(r10707, r10706, MPFR_RNDN);
        mpfr_neg(r10708, r10707, MPFR_RNDN);
        ;
        mpfr_sub(r10710, r10709, r10707, MPFR_RNDN);
        mpfr_div(r10711, r10708, r10710, MPFR_RNDN);
        ;
        mpfr_set_si(r10713, mpfr_cmp(r10711, r10712) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r10715, r10714, r10706, MPFR_RNDN);
        mpfr_div(r10716, r10709, r10706, MPFR_RNDN);
        ;
        mpfr_add(r10718, r10716, r10717, MPFR_RNDN);
        mpfr_add(r10719, r10715, r10718, MPFR_RNDN);
        ;
        mpfr_set_si(r10721, mpfr_cmp(r10711, r10720) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r10721, MPFR_RNDN)) { mpfr_set(r10722, r10711, MPFR_RNDN); } else { mpfr_set(r10722, r10719, MPFR_RNDN); };
        if (mpfr_get_si(r10713, MPFR_RNDN)) { mpfr_set(r10723, r10719, MPFR_RNDN); } else { mpfr_set(r10723, r10722, MPFR_RNDN); };
        return mpfr_get_d(r10723, MPFR_RNDN);
}

