#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 r4617573 = 2.0f;
        float r4617574 = x;
        float r4617575 = r4617573 * r4617574;
        float r4617576 = exp(r4617575);
        float r4617577 = 1.0f;
        float r4617578 = r4617576 - r4617577;
        float r4617579 = exp(r4617574);
        float r4617580 = r4617579 - r4617577;
        float r4617581 = r4617578 / r4617580;
        float r4617582 = sqrt(r4617581);
        return r4617582;
}

double f_id(double x) {
        double r4617583 = 2.0;
        double r4617584 = x;
        double r4617585 = r4617583 * r4617584;
        double r4617586 = exp(r4617585);
        double r4617587 = 1.0;
        double r4617588 = r4617586 - r4617587;
        double r4617589 = exp(r4617584);
        double r4617590 = r4617589 - r4617587;
        double r4617591 = r4617588 / r4617590;
        double r4617592 = sqrt(r4617591);
        return r4617592;
}


double f_of(float x) {
        float r4617593 = x;
        float r4617594 = -2.9334737818330797e-15f;
        bool r4617595 = r4617593 <= r4617594;
        float r4617596 = 2.0f;
        float r4617597 = r4617596 * r4617593;
        float r4617598 = exp(r4617597);
        float r4617599 = sqrt(r4617598);
        float r4617600 = 1.0f;
        float r4617601 = r4617599 + r4617600;
        float r4617602 = r4617599 - r4617600;
        float r4617603 = r4617601 * r4617602;
        float r4617604 = exp(r4617593);
        float r4617605 = r4617604 - r4617600;
        float r4617606 = r4617603 / r4617605;
        float r4617607 = sqrt(r4617606);
        float r4617608 = 0.5f;
        float r4617609 = r4617593 * r4617608;
        float r4617610 = sqrt(r4617596);
        float r4617611 = r4617609 / r4617610;
        float r4617612 = r4617611 + r4617610;
        float r4617613 = 0.25f;
        float r4617614 = 0.125f;
        float r4617615 = r4617614 / r4617596;
        float r4617616 = r4617613 - r4617615;
        float r4617617 = r4617593 * r4617593;
        float r4617618 = r4617617 / r4617610;
        float r4617619 = r4617616 * r4617618;
        float r4617620 = r4617612 + r4617619;
        float r4617621 = r4617595 ? r4617607 : r4617620;
        return r4617621;
}

double f_od(double x) {
        double r4617622 = x;
        double r4617623 = -2.9334737818330797e-15;
        bool r4617624 = r4617622 <= r4617623;
        double r4617625 = 2.0;
        double r4617626 = r4617625 * r4617622;
        double r4617627 = exp(r4617626);
        double r4617628 = sqrt(r4617627);
        double r4617629 = 1.0;
        double r4617630 = r4617628 + r4617629;
        double r4617631 = r4617628 - r4617629;
        double r4617632 = r4617630 * r4617631;
        double r4617633 = exp(r4617622);
        double r4617634 = r4617633 - r4617629;
        double r4617635 = r4617632 / r4617634;
        double r4617636 = sqrt(r4617635);
        double r4617637 = 0.5;
        double r4617638 = r4617622 * r4617637;
        double r4617639 = sqrt(r4617625);
        double r4617640 = r4617638 / r4617639;
        double r4617641 = r4617640 + r4617639;
        double r4617642 = 0.25;
        double r4617643 = 0.125;
        double r4617644 = r4617643 / r4617625;
        double r4617645 = r4617642 - r4617644;
        double r4617646 = r4617622 * r4617622;
        double r4617647 = r4617646 / r4617639;
        double r4617648 = r4617645 * r4617647;
        double r4617649 = r4617641 + r4617648;
        double r4617650 = r4617624 ? r4617636 : r4617649;
        return r4617650;
}

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 r4617651, r4617652, r4617653, r4617654, r4617655, r4617656, r4617657, r4617658, r4617659, r4617660;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4617651, "2", 10, MPFR_RNDN);
        mpfr_init(r4617652);
        mpfr_init(r4617653);
        mpfr_init(r4617654);
        mpfr_init_set_str(r4617655, "1", 10, MPFR_RNDN);
        mpfr_init(r4617656);
        mpfr_init(r4617657);
        mpfr_init(r4617658);
        mpfr_init(r4617659);
        mpfr_init(r4617660);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4617652, x, MPFR_RNDN);
        mpfr_mul(r4617653, r4617651, r4617652, MPFR_RNDN);
        mpfr_exp(r4617654, r4617653, MPFR_RNDN);
        ;
        mpfr_sub(r4617656, r4617654, r4617655, MPFR_RNDN);
        mpfr_exp(r4617657, r4617652, MPFR_RNDN);
        mpfr_sub(r4617658, r4617657, r4617655, MPFR_RNDN);
        mpfr_div(r4617659, r4617656, r4617658, MPFR_RNDN);
        mpfr_sqrt(r4617660, r4617659, MPFR_RNDN);
        return mpfr_get_d(r4617660, MPFR_RNDN);
}

static mpfr_t r4617661, r4617662, r4617663, r4617664, r4617665, r4617666, r4617667, r4617668, r4617669, r4617670, r4617671, r4617672, r4617673, r4617674, r4617675, r4617676, r4617677, r4617678, r4617679, r4617680, r4617681, r4617682, r4617683, r4617684, r4617685, r4617686, r4617687, r4617688, r4617689;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4617661);
        mpfr_init_set_str(r4617662, "-2.9334737818330797e-15", 10, MPFR_RNDN);
        mpfr_init(r4617663);
        mpfr_init_set_str(r4617664, "2", 10, MPFR_RNDN);
        mpfr_init(r4617665);
        mpfr_init(r4617666);
        mpfr_init(r4617667);
        mpfr_init_set_str(r4617668, "1", 10, MPFR_RNDN);
        mpfr_init(r4617669);
        mpfr_init(r4617670);
        mpfr_init(r4617671);
        mpfr_init(r4617672);
        mpfr_init(r4617673);
        mpfr_init(r4617674);
        mpfr_init(r4617675);
        mpfr_init_set_str(r4617676, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4617677);
        mpfr_init(r4617678);
        mpfr_init(r4617679);
        mpfr_init(r4617680);
        mpfr_init_set_str(r4617681, "1/4", 10, MPFR_RNDN);
        mpfr_init_set_str(r4617682, "1/8", 10, MPFR_RNDN);
        mpfr_init(r4617683);
        mpfr_init(r4617684);
        mpfr_init(r4617685);
        mpfr_init(r4617686);
        mpfr_init(r4617687);
        mpfr_init(r4617688);
        mpfr_init(r4617689);
}

double f_fm(double x) {
        mpfr_set_d(r4617661, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4617663, mpfr_cmp(r4617661, r4617662) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r4617665, r4617664, r4617661, MPFR_RNDN);
        mpfr_exp(r4617666, r4617665, MPFR_RNDN);
        mpfr_sqrt(r4617667, r4617666, MPFR_RNDN);
        ;
        mpfr_add(r4617669, r4617667, r4617668, MPFR_RNDN);
        mpfr_sub(r4617670, r4617667, r4617668, MPFR_RNDN);
        mpfr_mul(r4617671, r4617669, r4617670, MPFR_RNDN);
        mpfr_exp(r4617672, r4617661, MPFR_RNDN);
        mpfr_sub(r4617673, r4617672, r4617668, MPFR_RNDN);
        mpfr_div(r4617674, r4617671, r4617673, MPFR_RNDN);
        mpfr_sqrt(r4617675, r4617674, MPFR_RNDN);
        ;
        mpfr_mul(r4617677, r4617661, r4617676, MPFR_RNDN);
        mpfr_sqrt(r4617678, r4617664, MPFR_RNDN);
        mpfr_div(r4617679, r4617677, r4617678, MPFR_RNDN);
        mpfr_add(r4617680, r4617679, r4617678, MPFR_RNDN);
        ;
        ;
        mpfr_div(r4617683, r4617682, r4617664, MPFR_RNDN);
        mpfr_sub(r4617684, r4617681, r4617683, MPFR_RNDN);
        mpfr_sqr(r4617685, r4617661, MPFR_RNDN);
        mpfr_div(r4617686, r4617685, r4617678, MPFR_RNDN);
        mpfr_mul(r4617687, r4617684, r4617686, MPFR_RNDN);
        mpfr_add(r4617688, r4617680, r4617687, MPFR_RNDN);
        if (mpfr_get_si(r4617663, MPFR_RNDN)) { mpfr_set(r4617689, r4617675, MPFR_RNDN); } else { mpfr_set(r4617689, r4617688, MPFR_RNDN); };
        return mpfr_get_d(r4617689, MPFR_RNDN);
}

static mpfr_t r4617690, r4617691, r4617692, r4617693, r4617694, r4617695, r4617696, r4617697, r4617698, r4617699, r4617700, r4617701, r4617702, r4617703, r4617704, r4617705, r4617706, r4617707, r4617708, r4617709, r4617710, r4617711, r4617712, r4617713, r4617714, r4617715, r4617716, r4617717, r4617718;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4617690);
        mpfr_init_set_str(r4617691, "-2.9334737818330797e-15", 10, MPFR_RNDN);
        mpfr_init(r4617692);
        mpfr_init_set_str(r4617693, "2", 10, MPFR_RNDN);
        mpfr_init(r4617694);
        mpfr_init(r4617695);
        mpfr_init(r4617696);
        mpfr_init_set_str(r4617697, "1", 10, MPFR_RNDN);
        mpfr_init(r4617698);
        mpfr_init(r4617699);
        mpfr_init(r4617700);
        mpfr_init(r4617701);
        mpfr_init(r4617702);
        mpfr_init(r4617703);
        mpfr_init(r4617704);
        mpfr_init_set_str(r4617705, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4617706);
        mpfr_init(r4617707);
        mpfr_init(r4617708);
        mpfr_init(r4617709);
        mpfr_init_set_str(r4617710, "1/4", 10, MPFR_RNDN);
        mpfr_init_set_str(r4617711, "1/8", 10, MPFR_RNDN);
        mpfr_init(r4617712);
        mpfr_init(r4617713);
        mpfr_init(r4617714);
        mpfr_init(r4617715);
        mpfr_init(r4617716);
        mpfr_init(r4617717);
        mpfr_init(r4617718);
}

double f_dm(double x) {
        mpfr_set_d(r4617690, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4617692, mpfr_cmp(r4617690, r4617691) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r4617694, r4617693, r4617690, MPFR_RNDN);
        mpfr_exp(r4617695, r4617694, MPFR_RNDN);
        mpfr_sqrt(r4617696, r4617695, MPFR_RNDN);
        ;
        mpfr_add(r4617698, r4617696, r4617697, MPFR_RNDN);
        mpfr_sub(r4617699, r4617696, r4617697, MPFR_RNDN);
        mpfr_mul(r4617700, r4617698, r4617699, MPFR_RNDN);
        mpfr_exp(r4617701, r4617690, MPFR_RNDN);
        mpfr_sub(r4617702, r4617701, r4617697, MPFR_RNDN);
        mpfr_div(r4617703, r4617700, r4617702, MPFR_RNDN);
        mpfr_sqrt(r4617704, r4617703, MPFR_RNDN);
        ;
        mpfr_mul(r4617706, r4617690, r4617705, MPFR_RNDN);
        mpfr_sqrt(r4617707, r4617693, MPFR_RNDN);
        mpfr_div(r4617708, r4617706, r4617707, MPFR_RNDN);
        mpfr_add(r4617709, r4617708, r4617707, MPFR_RNDN);
        ;
        ;
        mpfr_div(r4617712, r4617711, r4617693, MPFR_RNDN);
        mpfr_sub(r4617713, r4617710, r4617712, MPFR_RNDN);
        mpfr_sqr(r4617714, r4617690, MPFR_RNDN);
        mpfr_div(r4617715, r4617714, r4617707, MPFR_RNDN);
        mpfr_mul(r4617716, r4617713, r4617715, MPFR_RNDN);
        mpfr_add(r4617717, r4617709, r4617716, MPFR_RNDN);
        if (mpfr_get_si(r4617692, MPFR_RNDN)) { mpfr_set(r4617718, r4617704, MPFR_RNDN); } else { mpfr_set(r4617718, r4617717, MPFR_RNDN); };
        return mpfr_get_d(r4617718, MPFR_RNDN);
}

