#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 r5319462 = x;
        float r5319463 = exp(r5319462);
        float r5319464 = 1.0f;
        float r5319465 = r5319463 - r5319464;
        float r5319466 = r5319463 / r5319465;
        return r5319466;
}

double f_id(double x) {
        double r5319467 = x;
        double r5319468 = exp(r5319467);
        double r5319469 = 1.0;
        double r5319470 = r5319468 - r5319469;
        double r5319471 = r5319468 / r5319470;
        return r5319471;
}


double f_of(float x) {
        float r5319472 = x;
        float r5319473 = -2.110554417076555e-07f;
        bool r5319474 = r5319472 <= r5319473;
        float r5319475 = exp(r5319472);
        float r5319476 = 1.0f;
        float r5319477 = r5319475 - r5319476;
        float r5319478 = r5319477 * (r5319477 * r5319477);
        float r5319479 = cbrt(r5319478);
        float r5319480 = r5319475 / r5319479;
        float r5319481 = r5319476 / r5319472;
        float r5319482 = 0.5f;
        float r5319483 = 0.08333333333333333f;
        float r5319484 = r5319483 * r5319472;
        float r5319485 = r5319482 + r5319484;
        float r5319486 = r5319481 + r5319485;
        float r5319487 = r5319474 ? r5319480 : r5319486;
        return r5319487;
}

double f_od(double x) {
        double r5319488 = x;
        double r5319489 = -2.110554417076555e-07;
        bool r5319490 = r5319488 <= r5319489;
        double r5319491 = exp(r5319488);
        double r5319492 = 1.0;
        double r5319493 = r5319491 - r5319492;
        double r5319494 = r5319493 * (r5319493 * r5319493);
        double r5319495 = cbrt(r5319494);
        double r5319496 = r5319491 / r5319495;
        double r5319497 = r5319492 / r5319488;
        double r5319498 = 0.5;
        double r5319499 = 0.08333333333333333;
        double r5319500 = r5319499 * r5319488;
        double r5319501 = r5319498 + r5319500;
        double r5319502 = r5319497 + r5319501;
        double r5319503 = r5319490 ? r5319496 : r5319502;
        return r5319503;
}

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 r5319504, r5319505, r5319506, r5319507, r5319508;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5319504);
        mpfr_init(r5319505);
        mpfr_init_set_str(r5319506, "1", 10, MPFR_RNDN);
        mpfr_init(r5319507);
        mpfr_init(r5319508);
}

double f_im(double x) {
        mpfr_set_d(r5319504, x, MPFR_RNDN);
        mpfr_exp(r5319505, r5319504, MPFR_RNDN);
        ;
        mpfr_sub(r5319507, r5319505, r5319506, MPFR_RNDN);
        mpfr_div(r5319508, r5319505, r5319507, MPFR_RNDN);
        return mpfr_get_d(r5319508, MPFR_RNDN);
}

static mpfr_t r5319509, r5319510, r5319511, r5319512, r5319513, r5319514, r5319515, r5319516, r5319517, r5319518, r5319519, r5319520, r5319521, r5319522, r5319523, r5319524;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5319509);
        mpfr_init_set_str(r5319510, "-2.110554417076555e-07", 10, MPFR_RNDN);
        mpfr_init(r5319511);
        mpfr_init(r5319512);
        mpfr_init_set_str(r5319513, "1", 10, MPFR_RNDN);
        mpfr_init(r5319514);
        mpfr_init(r5319515);
        mpfr_init(r5319516);
        mpfr_init(r5319517);
        mpfr_init(r5319518);
        mpfr_init_set_str(r5319519, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5319520, "1/12", 10, MPFR_RNDN);
        mpfr_init(r5319521);
        mpfr_init(r5319522);
        mpfr_init(r5319523);
        mpfr_init(r5319524);
}

double f_fm(double x) {
        mpfr_set_d(r5319509, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5319511, mpfr_cmp(r5319509, r5319510) <= 0, MPFR_RNDN);
        mpfr_exp(r5319512, r5319509, MPFR_RNDN);
        ;
        mpfr_sub(r5319514, r5319512, r5319513, MPFR_RNDN);
        mpfr_mul(r5319515, r5319514, r5319514, MPFR_RNDN); mpfr_mul(r5319515, r5319515, r5319514, MPFR_RNDN);
        mpfr_cbrt(r5319516, r5319515, MPFR_RNDN);
        mpfr_div(r5319517, r5319512, r5319516, MPFR_RNDN);
        mpfr_div(r5319518, r5319513, r5319509, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r5319521, r5319520, r5319509, MPFR_RNDN);
        mpfr_add(r5319522, r5319519, r5319521, MPFR_RNDN);
        mpfr_add(r5319523, r5319518, r5319522, MPFR_RNDN);
        if (mpfr_get_si(r5319511, MPFR_RNDN)) { mpfr_set(r5319524, r5319517, MPFR_RNDN); } else { mpfr_set(r5319524, r5319523, MPFR_RNDN); };
        return mpfr_get_d(r5319524, MPFR_RNDN);
}

static mpfr_t r5319525, r5319526, r5319527, r5319528, r5319529, r5319530, r5319531, r5319532, r5319533, r5319534, r5319535, r5319536, r5319537, r5319538, r5319539, r5319540;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5319525);
        mpfr_init_set_str(r5319526, "-2.110554417076555e-07", 10, MPFR_RNDN);
        mpfr_init(r5319527);
        mpfr_init(r5319528);
        mpfr_init_set_str(r5319529, "1", 10, MPFR_RNDN);
        mpfr_init(r5319530);
        mpfr_init(r5319531);
        mpfr_init(r5319532);
        mpfr_init(r5319533);
        mpfr_init(r5319534);
        mpfr_init_set_str(r5319535, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5319536, "1/12", 10, MPFR_RNDN);
        mpfr_init(r5319537);
        mpfr_init(r5319538);
        mpfr_init(r5319539);
        mpfr_init(r5319540);
}

double f_dm(double x) {
        mpfr_set_d(r5319525, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5319527, mpfr_cmp(r5319525, r5319526) <= 0, MPFR_RNDN);
        mpfr_exp(r5319528, r5319525, MPFR_RNDN);
        ;
        mpfr_sub(r5319530, r5319528, r5319529, MPFR_RNDN);
        mpfr_mul(r5319531, r5319530, r5319530, MPFR_RNDN); mpfr_mul(r5319531, r5319531, r5319530, MPFR_RNDN);
        mpfr_cbrt(r5319532, r5319531, MPFR_RNDN);
        mpfr_div(r5319533, r5319528, r5319532, MPFR_RNDN);
        mpfr_div(r5319534, r5319529, r5319525, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r5319537, r5319536, r5319525, MPFR_RNDN);
        mpfr_add(r5319538, r5319535, r5319537, MPFR_RNDN);
        mpfr_add(r5319539, r5319534, r5319538, MPFR_RNDN);
        if (mpfr_get_si(r5319527, MPFR_RNDN)) { mpfr_set(r5319540, r5319533, MPFR_RNDN); } else { mpfr_set(r5319540, r5319539, MPFR_RNDN); };
        return mpfr_get_d(r5319540, MPFR_RNDN);
}

