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

char *name = "NMSE section 3.5";

double f_if(float a, float x) {
        float r4618559 = a;
        float r4618560 = x;
        float r4618561 = r4618559 * r4618560;
        float r4618562 = exp(r4618561);
        float r4618563 = 1.0f;
        float r4618564 = r4618562 - r4618563;
        return r4618564;
}

double f_id(double a, double x) {
        double r4618565 = a;
        double r4618566 = x;
        double r4618567 = r4618565 * r4618566;
        double r4618568 = exp(r4618567);
        double r4618569 = 1.0;
        double r4618570 = r4618568 - r4618569;
        return r4618570;
}


double f_of(float a, float x) {
        float r4618571 = a;
        float r4618572 = x;
        float r4618573 = r4618571 * r4618572;
        float r4618574 = -1.1501639825495647e-13f;
        bool r4618575 = r4618573 <= r4618574;
        float r4618576 = exp(r4618573);
        float r4618577 = 1.0f;
        float r4618578 = r4618576 - r4618577;
        float r4618579 = 2.0f;
        float r4618580 = r4618573 * r4618573;
        float r4618581 = r4618573 + r4618580;
        float r4618582 = r4618579 * r4618581;
        float r4618583 = r4618577 + r4618576;
        float r4618584 = r4618582 / r4618583;
        float r4618585 = r4618575 ? r4618578 : r4618584;
        return r4618585;
}

double f_od(double a, double x) {
        double r4618586 = a;
        double r4618587 = x;
        double r4618588 = r4618586 * r4618587;
        double r4618589 = -1.1501639825495647e-13;
        bool r4618590 = r4618588 <= r4618589;
        double r4618591 = exp(r4618588);
        double r4618592 = 1.0;
        double r4618593 = r4618591 - r4618592;
        double r4618594 = 2.0;
        double r4618595 = r4618588 * r4618588;
        double r4618596 = r4618588 + r4618595;
        double r4618597 = r4618594 * r4618596;
        double r4618598 = r4618592 + r4618591;
        double r4618599 = r4618597 / r4618598;
        double r4618600 = r4618590 ? r4618593 : r4618599;
        return r4618600;
}

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 r4618601, r4618602, r4618603, r4618604, r4618605, r4618606;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618601);
        mpfr_init(r4618602);
        mpfr_init(r4618603);
        mpfr_init(r4618604);
        mpfr_init_set_str(r4618605, "1", 10, MPFR_RNDN);
        mpfr_init(r4618606);
}

double f_im(double a, double x) {
        mpfr_set_d(r4618601, a, MPFR_RNDN);
        mpfr_set_d(r4618602, x, MPFR_RNDN);
        mpfr_mul(r4618603, r4618601, r4618602, MPFR_RNDN);
        mpfr_exp(r4618604, r4618603, MPFR_RNDN);
        ;
        mpfr_sub(r4618606, r4618604, r4618605, MPFR_RNDN);
        return mpfr_get_d(r4618606, MPFR_RNDN);
}

static mpfr_t r4618607, r4618608, r4618609, r4618610, r4618611, r4618612, r4618613, r4618614, r4618615, r4618616, r4618617, r4618618, r4618619, r4618620, r4618621;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618607);
        mpfr_init(r4618608);
        mpfr_init(r4618609);
        mpfr_init_set_str(r4618610, "-1.1501639825495647e-13", 10, MPFR_RNDN);
        mpfr_init(r4618611);
        mpfr_init(r4618612);
        mpfr_init_set_str(r4618613, "1", 10, MPFR_RNDN);
        mpfr_init(r4618614);
        mpfr_init_set_str(r4618615, "2", 10, MPFR_RNDN);
        mpfr_init(r4618616);
        mpfr_init(r4618617);
        mpfr_init(r4618618);
        mpfr_init(r4618619);
        mpfr_init(r4618620);
        mpfr_init(r4618621);
}

double f_fm(double a, double x) {
        mpfr_set_d(r4618607, a, MPFR_RNDN);
        mpfr_set_d(r4618608, x, MPFR_RNDN);
        mpfr_mul(r4618609, r4618607, r4618608, MPFR_RNDN);
        ;
        mpfr_set_si(r4618611, mpfr_cmp(r4618609, r4618610) <= 0, MPFR_RNDN);
        mpfr_exp(r4618612, r4618609, MPFR_RNDN);
        ;
        mpfr_sub(r4618614, r4618612, r4618613, MPFR_RNDN);
        ;
        mpfr_sqr(r4618616, r4618609, MPFR_RNDN);
        mpfr_add(r4618617, r4618609, r4618616, MPFR_RNDN);
        mpfr_mul(r4618618, r4618615, r4618617, MPFR_RNDN);
        mpfr_add(r4618619, r4618613, r4618612, MPFR_RNDN);
        mpfr_div(r4618620, r4618618, r4618619, MPFR_RNDN);
        if (mpfr_get_si(r4618611, MPFR_RNDN)) { mpfr_set(r4618621, r4618614, MPFR_RNDN); } else { mpfr_set(r4618621, r4618620, MPFR_RNDN); };
        return mpfr_get_d(r4618621, MPFR_RNDN);
}

static mpfr_t r4618622, r4618623, r4618624, r4618625, r4618626, r4618627, r4618628, r4618629, r4618630, r4618631, r4618632, r4618633, r4618634, r4618635, r4618636;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618622);
        mpfr_init(r4618623);
        mpfr_init(r4618624);
        mpfr_init_set_str(r4618625, "-1.1501639825495647e-13", 10, MPFR_RNDN);
        mpfr_init(r4618626);
        mpfr_init(r4618627);
        mpfr_init_set_str(r4618628, "1", 10, MPFR_RNDN);
        mpfr_init(r4618629);
        mpfr_init_set_str(r4618630, "2", 10, MPFR_RNDN);
        mpfr_init(r4618631);
        mpfr_init(r4618632);
        mpfr_init(r4618633);
        mpfr_init(r4618634);
        mpfr_init(r4618635);
        mpfr_init(r4618636);
}

double f_dm(double a, double x) {
        mpfr_set_d(r4618622, a, MPFR_RNDN);
        mpfr_set_d(r4618623, x, MPFR_RNDN);
        mpfr_mul(r4618624, r4618622, r4618623, MPFR_RNDN);
        ;
        mpfr_set_si(r4618626, mpfr_cmp(r4618624, r4618625) <= 0, MPFR_RNDN);
        mpfr_exp(r4618627, r4618624, MPFR_RNDN);
        ;
        mpfr_sub(r4618629, r4618627, r4618628, MPFR_RNDN);
        ;
        mpfr_sqr(r4618631, r4618624, MPFR_RNDN);
        mpfr_add(r4618632, r4618624, r4618631, MPFR_RNDN);
        mpfr_mul(r4618633, r4618630, r4618632, MPFR_RNDN);
        mpfr_add(r4618634, r4618628, r4618627, MPFR_RNDN);
        mpfr_div(r4618635, r4618633, r4618634, MPFR_RNDN);
        if (mpfr_get_si(r4618626, MPFR_RNDN)) { mpfr_set(r4618636, r4618629, MPFR_RNDN); } else { mpfr_set(r4618636, r4618635, MPFR_RNDN); };
        return mpfr_get_d(r4618636, MPFR_RNDN);
}

