#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "NMSE section 3.11";

double f_if(float x) {
        float r4618637 = x;
        float r4618638 = exp(r4618637);
        float r4618639 = 1.0f;
        float r4618640 = r4618638 - r4618639;
        float r4618641 = r4618638 / r4618640;
        return r4618641;
}

double f_id(double x) {
        double r4618642 = x;
        double r4618643 = exp(r4618642);
        double r4618644 = 1.0;
        double r4618645 = r4618643 - r4618644;
        double r4618646 = r4618643 / r4618645;
        return r4618646;
}


double f_of(float x) {
        float r4618647 = x;
        float r4618648 = -8.658073314327725e-05f;
        bool r4618649 = r4618647 <= r4618648;
        float r4618650 = exp(r4618647);
        float r4618651 = 1.0f;
        float r4618652 = r4618650 - r4618651;
        float r4618653 = r4618650 / r4618652;
        float r4618654 = 0.5f;
        float r4618655 = 0.08333333333333333f;
        float r4618656 = r4618655 * r4618647;
        float r4618657 = r4618651 / r4618647;
        float r4618658 = r4618656 + r4618657;
        float r4618659 = r4618654 + r4618658;
        float r4618660 = r4618649 ? r4618653 : r4618659;
        return r4618660;
}

double f_od(double x) {
        double r4618661 = x;
        double r4618662 = -8.658073314327725e-05;
        bool r4618663 = r4618661 <= r4618662;
        double r4618664 = exp(r4618661);
        double r4618665 = 1.0;
        double r4618666 = r4618664 - r4618665;
        double r4618667 = r4618664 / r4618666;
        double r4618668 = 0.5;
        double r4618669 = 0.08333333333333333;
        double r4618670 = r4618669 * r4618661;
        double r4618671 = r4618665 / r4618661;
        double r4618672 = r4618670 + r4618671;
        double r4618673 = r4618668 + r4618672;
        double r4618674 = r4618663 ? r4618667 : r4618673;
        return r4618674;
}

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 r4618675, r4618676, r4618677, r4618678, r4618679;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618675);
        mpfr_init(r4618676);
        mpfr_init_set_str(r4618677, "1", 10, MPFR_RNDN);
        mpfr_init(r4618678);
        mpfr_init(r4618679);
}

double f_im(double x) {
        mpfr_set_d(r4618675, x, MPFR_RNDN);
        mpfr_exp(r4618676, r4618675, MPFR_RNDN);
        ;
        mpfr_sub(r4618678, r4618676, r4618677, MPFR_RNDN);
        mpfr_div(r4618679, r4618676, r4618678, MPFR_RNDN);
        return mpfr_get_d(r4618679, MPFR_RNDN);
}

static mpfr_t r4618680, r4618681, r4618682, r4618683, r4618684, r4618685, r4618686, r4618687, r4618688, r4618689, r4618690, r4618691, r4618692, r4618693;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618680);
        mpfr_init_set_str(r4618681, "-8.658073314327725e-05", 10, MPFR_RNDN);
        mpfr_init(r4618682);
        mpfr_init(r4618683);
        mpfr_init_set_str(r4618684, "1", 10, MPFR_RNDN);
        mpfr_init(r4618685);
        mpfr_init(r4618686);
        mpfr_init_set_str(r4618687, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r4618688, "1/12", 10, MPFR_RNDN);
        mpfr_init(r4618689);
        mpfr_init(r4618690);
        mpfr_init(r4618691);
        mpfr_init(r4618692);
        mpfr_init(r4618693);
}

double f_fm(double x) {
        mpfr_set_d(r4618680, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4618682, mpfr_cmp(r4618680, r4618681) <= 0, MPFR_RNDN);
        mpfr_exp(r4618683, r4618680, MPFR_RNDN);
        ;
        mpfr_sub(r4618685, r4618683, r4618684, MPFR_RNDN);
        mpfr_div(r4618686, r4618683, r4618685, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r4618689, r4618688, r4618680, MPFR_RNDN);
        mpfr_div(r4618690, r4618684, r4618680, MPFR_RNDN);
        mpfr_add(r4618691, r4618689, r4618690, MPFR_RNDN);
        mpfr_add(r4618692, r4618687, r4618691, MPFR_RNDN);
        if (mpfr_get_si(r4618682, MPFR_RNDN)) { mpfr_set(r4618693, r4618686, MPFR_RNDN); } else { mpfr_set(r4618693, r4618692, MPFR_RNDN); };
        return mpfr_get_d(r4618693, MPFR_RNDN);
}

static mpfr_t r4618694, r4618695, r4618696, r4618697, r4618698, r4618699, r4618700, r4618701, r4618702, r4618703, r4618704, r4618705, r4618706, r4618707;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618694);
        mpfr_init_set_str(r4618695, "-8.658073314327725e-05", 10, MPFR_RNDN);
        mpfr_init(r4618696);
        mpfr_init(r4618697);
        mpfr_init_set_str(r4618698, "1", 10, MPFR_RNDN);
        mpfr_init(r4618699);
        mpfr_init(r4618700);
        mpfr_init_set_str(r4618701, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r4618702, "1/12", 10, MPFR_RNDN);
        mpfr_init(r4618703);
        mpfr_init(r4618704);
        mpfr_init(r4618705);
        mpfr_init(r4618706);
        mpfr_init(r4618707);
}

double f_dm(double x) {
        mpfr_set_d(r4618694, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4618696, mpfr_cmp(r4618694, r4618695) <= 0, MPFR_RNDN);
        mpfr_exp(r4618697, r4618694, MPFR_RNDN);
        ;
        mpfr_sub(r4618699, r4618697, r4618698, MPFR_RNDN);
        mpfr_div(r4618700, r4618697, r4618699, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r4618703, r4618702, r4618694, MPFR_RNDN);
        mpfr_div(r4618704, r4618698, r4618694, MPFR_RNDN);
        mpfr_add(r4618705, r4618703, r4618704, MPFR_RNDN);
        mpfr_add(r4618706, r4618701, r4618705, MPFR_RNDN);
        if (mpfr_get_si(r4618696, MPFR_RNDN)) { mpfr_set(r4618707, r4618700, MPFR_RNDN); } else { mpfr_set(r4618707, r4618706, MPFR_RNDN); };
        return mpfr_get_d(r4618707, MPFR_RNDN);
}

