#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 r4774459 = a;
        float r4774460 = x;
        float r4774461 = r4774459 * r4774460;
        float r4774462 = exp(r4774461);
        float r4774463 = 1.0f;
        float r4774464 = r4774462 - r4774463;
        return r4774464;
}

double f_id(double a, double x) {
        double r4774465 = a;
        double r4774466 = x;
        double r4774467 = r4774465 * r4774466;
        double r4774468 = exp(r4774467);
        double r4774469 = 1.0;
        double r4774470 = r4774468 - r4774469;
        return r4774470;
}


double f_of(float a, float x) {
        float r4774471 = a;
        float r4774472 = x;
        float r4774473 = r4774471 * r4774472;
        float r4774474 = -1.1501639825495647e-13f;
        bool r4774475 = r4774473 <= r4774474;
        float r4774476 = r4774471 + r4774471;
        float r4774477 = r4774472 * r4774476;
        float r4774478 = exp(r4774477);
        float r4774479 = 1.0f;
        float r4774480 = r4774479 * r4774479;
        float r4774481 = r4774478 - r4774480;
        float r4774482 = exp(r4774473);
        float r4774483 = r4774482 + r4774479;
        float r4774484 = r4774481 / r4774483;
        float r4774485 = r4774472 * r4774473;
        float r4774486 = -r4774472;
        float r4774487 = r4774485 - r4774486;
        float r4774488 = r4774476 * r4774487;
        float r4774489 = r4774488 / r4774483;
        float r4774490 = r4774475 ? r4774484 : r4774489;
        return r4774490;
}

double f_od(double a, double x) {
        double r4774491 = a;
        double r4774492 = x;
        double r4774493 = r4774491 * r4774492;
        double r4774494 = -1.1501639825495647e-13;
        bool r4774495 = r4774493 <= r4774494;
        double r4774496 = r4774491 + r4774491;
        double r4774497 = r4774492 * r4774496;
        double r4774498 = exp(r4774497);
        double r4774499 = 1.0;
        double r4774500 = r4774499 * r4774499;
        double r4774501 = r4774498 - r4774500;
        double r4774502 = exp(r4774493);
        double r4774503 = r4774502 + r4774499;
        double r4774504 = r4774501 / r4774503;
        double r4774505 = r4774492 * r4774493;
        double r4774506 = -r4774492;
        double r4774507 = r4774505 - r4774506;
        double r4774508 = r4774496 * r4774507;
        double r4774509 = r4774508 / r4774503;
        double r4774510 = r4774495 ? r4774504 : r4774509;
        return r4774510;
}

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 r4774511, r4774512, r4774513, r4774514, r4774515, r4774516;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774511);
        mpfr_init(r4774512);
        mpfr_init(r4774513);
        mpfr_init(r4774514);
        mpfr_init_set_str(r4774515, "1", 10, MPFR_RNDN);
        mpfr_init(r4774516);
}

double f_im(double a, double x) {
        mpfr_set_d(r4774511, a, MPFR_RNDN);
        mpfr_set_d(r4774512, x, MPFR_RNDN);
        mpfr_mul(r4774513, r4774511, r4774512, MPFR_RNDN);
        mpfr_exp(r4774514, r4774513, MPFR_RNDN);
        ;
        mpfr_sub(r4774516, r4774514, r4774515, MPFR_RNDN);
        return mpfr_get_d(r4774516, MPFR_RNDN);
}

static mpfr_t r4774517, r4774518, r4774519, r4774520, r4774521, r4774522, r4774523, r4774524, r4774525, r4774526, r4774527, r4774528, r4774529, r4774530, r4774531, r4774532, r4774533, r4774534, r4774535, r4774536;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774517);
        mpfr_init(r4774518);
        mpfr_init(r4774519);
        mpfr_init_set_str(r4774520, "-1.1501639825495647e-13", 10, MPFR_RNDN);
        mpfr_init(r4774521);
        mpfr_init(r4774522);
        mpfr_init(r4774523);
        mpfr_init(r4774524);
        mpfr_init_set_str(r4774525, "1", 10, MPFR_RNDN);
        mpfr_init(r4774526);
        mpfr_init(r4774527);
        mpfr_init(r4774528);
        mpfr_init(r4774529);
        mpfr_init(r4774530);
        mpfr_init(r4774531);
        mpfr_init(r4774532);
        mpfr_init(r4774533);
        mpfr_init(r4774534);
        mpfr_init(r4774535);
        mpfr_init(r4774536);
}

double f_fm(double a, double x) {
        mpfr_set_d(r4774517, a, MPFR_RNDN);
        mpfr_set_d(r4774518, x, MPFR_RNDN);
        mpfr_mul(r4774519, r4774517, r4774518, MPFR_RNDN);
        ;
        mpfr_set_si(r4774521, mpfr_cmp(r4774519, r4774520) <= 0, MPFR_RNDN);
        mpfr_add(r4774522, r4774517, r4774517, MPFR_RNDN);
        mpfr_mul(r4774523, r4774518, r4774522, MPFR_RNDN);
        mpfr_exp(r4774524, r4774523, MPFR_RNDN);
        ;
        mpfr_sqr(r4774526, r4774525, MPFR_RNDN);
        mpfr_sub(r4774527, r4774524, r4774526, MPFR_RNDN);
        mpfr_exp(r4774528, r4774519, MPFR_RNDN);
        mpfr_add(r4774529, r4774528, r4774525, MPFR_RNDN);
        mpfr_div(r4774530, r4774527, r4774529, MPFR_RNDN);
        mpfr_mul(r4774531, r4774518, r4774519, MPFR_RNDN);
        mpfr_neg(r4774532, r4774518, MPFR_RNDN);
        mpfr_sub(r4774533, r4774531, r4774532, MPFR_RNDN);
        mpfr_mul(r4774534, r4774522, r4774533, MPFR_RNDN);
        mpfr_div(r4774535, r4774534, r4774529, MPFR_RNDN);
        if (mpfr_get_si(r4774521, MPFR_RNDN)) { mpfr_set(r4774536, r4774530, MPFR_RNDN); } else { mpfr_set(r4774536, r4774535, MPFR_RNDN); };
        return mpfr_get_d(r4774536, MPFR_RNDN);
}

static mpfr_t r4774537, r4774538, r4774539, r4774540, r4774541, r4774542, r4774543, r4774544, r4774545, r4774546, r4774547, r4774548, r4774549, r4774550, r4774551, r4774552, r4774553, r4774554, r4774555, r4774556;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774537);
        mpfr_init(r4774538);
        mpfr_init(r4774539);
        mpfr_init_set_str(r4774540, "-1.1501639825495647e-13", 10, MPFR_RNDN);
        mpfr_init(r4774541);
        mpfr_init(r4774542);
        mpfr_init(r4774543);
        mpfr_init(r4774544);
        mpfr_init_set_str(r4774545, "1", 10, MPFR_RNDN);
        mpfr_init(r4774546);
        mpfr_init(r4774547);
        mpfr_init(r4774548);
        mpfr_init(r4774549);
        mpfr_init(r4774550);
        mpfr_init(r4774551);
        mpfr_init(r4774552);
        mpfr_init(r4774553);
        mpfr_init(r4774554);
        mpfr_init(r4774555);
        mpfr_init(r4774556);
}

double f_dm(double a, double x) {
        mpfr_set_d(r4774537, a, MPFR_RNDN);
        mpfr_set_d(r4774538, x, MPFR_RNDN);
        mpfr_mul(r4774539, r4774537, r4774538, MPFR_RNDN);
        ;
        mpfr_set_si(r4774541, mpfr_cmp(r4774539, r4774540) <= 0, MPFR_RNDN);
        mpfr_add(r4774542, r4774537, r4774537, MPFR_RNDN);
        mpfr_mul(r4774543, r4774538, r4774542, MPFR_RNDN);
        mpfr_exp(r4774544, r4774543, MPFR_RNDN);
        ;
        mpfr_sqr(r4774546, r4774545, MPFR_RNDN);
        mpfr_sub(r4774547, r4774544, r4774546, MPFR_RNDN);
        mpfr_exp(r4774548, r4774539, MPFR_RNDN);
        mpfr_add(r4774549, r4774548, r4774545, MPFR_RNDN);
        mpfr_div(r4774550, r4774547, r4774549, MPFR_RNDN);
        mpfr_mul(r4774551, r4774538, r4774539, MPFR_RNDN);
        mpfr_neg(r4774552, r4774538, MPFR_RNDN);
        mpfr_sub(r4774553, r4774551, r4774552, MPFR_RNDN);
        mpfr_mul(r4774554, r4774542, r4774553, MPFR_RNDN);
        mpfr_div(r4774555, r4774554, r4774549, MPFR_RNDN);
        if (mpfr_get_si(r4774541, MPFR_RNDN)) { mpfr_set(r4774556, r4774550, MPFR_RNDN); } else { mpfr_set(r4774556, r4774555, MPFR_RNDN); };
        return mpfr_get_d(r4774556, MPFR_RNDN);
}

