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

char *name = "NMSE problem 3.4.4";

double f_if(float x) {
        float r5318390 = 2.0f;
        float r5318391 = x;
        float r5318392 = r5318390 * r5318391;
        float r5318393 = exp(r5318392);
        float r5318394 = 1.0f;
        float r5318395 = r5318393 - r5318394;
        float r5318396 = exp(r5318391);
        float r5318397 = r5318396 - r5318394;
        float r5318398 = r5318395 / r5318397;
        float r5318399 = sqrt(r5318398);
        return r5318399;
}

double f_id(double x) {
        double r5318400 = 2.0;
        double r5318401 = x;
        double r5318402 = r5318400 * r5318401;
        double r5318403 = exp(r5318402);
        double r5318404 = 1.0;
        double r5318405 = r5318403 - r5318404;
        double r5318406 = exp(r5318401);
        double r5318407 = r5318406 - r5318404;
        double r5318408 = r5318405 / r5318407;
        double r5318409 = sqrt(r5318408);
        return r5318409;
}


double f_of(float x) {
        float r5318410 = x;
        float r5318411 = -2.110554417076555e-07f;
        bool r5318412 = r5318410 <= r5318411;
        float r5318413 = 2.0f;
        float r5318414 = r5318413 * r5318410;
        float r5318415 = exp(r5318414);
        float r5318416 = 1.0f;
        float r5318417 = r5318415 - r5318416;
        float r5318418 = exp(r5318410);
        float r5318419 = r5318418 - r5318416;
        float r5318420 = r5318417 / r5318419;
        float r5318421 = sqrt(r5318420);
        float r5318422 = 0.5f;
        float r5318423 = r5318410 * r5318410;
        float r5318424 = r5318422 * r5318423;
        float r5318425 = r5318413 + r5318424;
        float r5318426 = r5318410 + r5318425;
        float r5318427 = sqrt(r5318426);
        float r5318428 = r5318412 ? r5318421 : r5318427;
        return r5318428;
}

double f_od(double x) {
        double r5318429 = x;
        double r5318430 = -2.110554417076555e-07;
        bool r5318431 = r5318429 <= r5318430;
        double r5318432 = 2.0;
        double r5318433 = r5318432 * r5318429;
        double r5318434 = exp(r5318433);
        double r5318435 = 1.0;
        double r5318436 = r5318434 - r5318435;
        double r5318437 = exp(r5318429);
        double r5318438 = r5318437 - r5318435;
        double r5318439 = r5318436 / r5318438;
        double r5318440 = sqrt(r5318439);
        double r5318441 = 0.5;
        double r5318442 = r5318429 * r5318429;
        double r5318443 = r5318441 * r5318442;
        double r5318444 = r5318432 + r5318443;
        double r5318445 = r5318429 + r5318444;
        double r5318446 = sqrt(r5318445);
        double r5318447 = r5318431 ? r5318440 : r5318446;
        return r5318447;
}

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 r5318448, r5318449, r5318450, r5318451, r5318452, r5318453, r5318454, r5318455, r5318456, r5318457;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5318448, "2", 10, MPFR_RNDN);
        mpfr_init(r5318449);
        mpfr_init(r5318450);
        mpfr_init(r5318451);
        mpfr_init_set_str(r5318452, "1", 10, MPFR_RNDN);
        mpfr_init(r5318453);
        mpfr_init(r5318454);
        mpfr_init(r5318455);
        mpfr_init(r5318456);
        mpfr_init(r5318457);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5318449, x, MPFR_RNDN);
        mpfr_mul(r5318450, r5318448, r5318449, MPFR_RNDN);
        mpfr_exp(r5318451, r5318450, MPFR_RNDN);
        ;
        mpfr_sub(r5318453, r5318451, r5318452, MPFR_RNDN);
        mpfr_exp(r5318454, r5318449, MPFR_RNDN);
        mpfr_sub(r5318455, r5318454, r5318452, MPFR_RNDN);
        mpfr_div(r5318456, r5318453, r5318455, MPFR_RNDN);
        mpfr_sqrt(r5318457, r5318456, MPFR_RNDN);
        return mpfr_get_d(r5318457, MPFR_RNDN);
}

static mpfr_t r5318458, r5318459, r5318460, r5318461, r5318462, r5318463, r5318464, r5318465, r5318466, r5318467, r5318468, r5318469, r5318470, r5318471, r5318472, r5318473, r5318474, r5318475, r5318476;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5318458);
        mpfr_init_set_str(r5318459, "-2.110554417076555e-07", 10, MPFR_RNDN);
        mpfr_init(r5318460);
        mpfr_init_set_str(r5318461, "2", 10, MPFR_RNDN);
        mpfr_init(r5318462);
        mpfr_init(r5318463);
        mpfr_init_set_str(r5318464, "1", 10, MPFR_RNDN);
        mpfr_init(r5318465);
        mpfr_init(r5318466);
        mpfr_init(r5318467);
        mpfr_init(r5318468);
        mpfr_init(r5318469);
        mpfr_init_set_str(r5318470, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5318471);
        mpfr_init(r5318472);
        mpfr_init(r5318473);
        mpfr_init(r5318474);
        mpfr_init(r5318475);
        mpfr_init(r5318476);
}

double f_fm(double x) {
        mpfr_set_d(r5318458, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5318460, mpfr_cmp(r5318458, r5318459) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5318462, r5318461, r5318458, MPFR_RNDN);
        mpfr_exp(r5318463, r5318462, MPFR_RNDN);
        ;
        mpfr_sub(r5318465, r5318463, r5318464, MPFR_RNDN);
        mpfr_exp(r5318466, r5318458, MPFR_RNDN);
        mpfr_sub(r5318467, r5318466, r5318464, MPFR_RNDN);
        mpfr_div(r5318468, r5318465, r5318467, MPFR_RNDN);
        mpfr_sqrt(r5318469, r5318468, MPFR_RNDN);
        ;
        mpfr_sqr(r5318471, r5318458, MPFR_RNDN);
        mpfr_mul(r5318472, r5318470, r5318471, MPFR_RNDN);
        mpfr_add(r5318473, r5318461, r5318472, MPFR_RNDN);
        mpfr_add(r5318474, r5318458, r5318473, MPFR_RNDN);
        mpfr_sqrt(r5318475, r5318474, MPFR_RNDN);
        if (mpfr_get_si(r5318460, MPFR_RNDN)) { mpfr_set(r5318476, r5318469, MPFR_RNDN); } else { mpfr_set(r5318476, r5318475, MPFR_RNDN); };
        return mpfr_get_d(r5318476, MPFR_RNDN);
}

static mpfr_t r5318477, r5318478, r5318479, r5318480, r5318481, r5318482, r5318483, r5318484, r5318485, r5318486, r5318487, r5318488, r5318489, r5318490, r5318491, r5318492, r5318493, r5318494, r5318495;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5318477);
        mpfr_init_set_str(r5318478, "-2.110554417076555e-07", 10, MPFR_RNDN);
        mpfr_init(r5318479);
        mpfr_init_set_str(r5318480, "2", 10, MPFR_RNDN);
        mpfr_init(r5318481);
        mpfr_init(r5318482);
        mpfr_init_set_str(r5318483, "1", 10, MPFR_RNDN);
        mpfr_init(r5318484);
        mpfr_init(r5318485);
        mpfr_init(r5318486);
        mpfr_init(r5318487);
        mpfr_init(r5318488);
        mpfr_init_set_str(r5318489, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5318490);
        mpfr_init(r5318491);
        mpfr_init(r5318492);
        mpfr_init(r5318493);
        mpfr_init(r5318494);
        mpfr_init(r5318495);
}

double f_dm(double x) {
        mpfr_set_d(r5318477, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5318479, mpfr_cmp(r5318477, r5318478) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5318481, r5318480, r5318477, MPFR_RNDN);
        mpfr_exp(r5318482, r5318481, MPFR_RNDN);
        ;
        mpfr_sub(r5318484, r5318482, r5318483, MPFR_RNDN);
        mpfr_exp(r5318485, r5318477, MPFR_RNDN);
        mpfr_sub(r5318486, r5318485, r5318483, MPFR_RNDN);
        mpfr_div(r5318487, r5318484, r5318486, MPFR_RNDN);
        mpfr_sqrt(r5318488, r5318487, MPFR_RNDN);
        ;
        mpfr_sqr(r5318490, r5318477, MPFR_RNDN);
        mpfr_mul(r5318491, r5318489, r5318490, MPFR_RNDN);
        mpfr_add(r5318492, r5318480, r5318491, MPFR_RNDN);
        mpfr_add(r5318493, r5318477, r5318492, MPFR_RNDN);
        mpfr_sqrt(r5318494, r5318493, MPFR_RNDN);
        if (mpfr_get_si(r5318479, MPFR_RNDN)) { mpfr_set(r5318495, r5318488, MPFR_RNDN); } else { mpfr_set(r5318495, r5318494, MPFR_RNDN); };
        return mpfr_get_d(r5318495, MPFR_RNDN);
}

