#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 r5352641 = 2.0f;
        float r5352642 = x;
        float r5352643 = r5352641 * r5352642;
        float r5352644 = exp(r5352643);
        float r5352645 = 1.0f;
        float r5352646 = r5352644 - r5352645;
        float r5352647 = exp(r5352642);
        float r5352648 = r5352647 - r5352645;
        float r5352649 = r5352646 / r5352648;
        float r5352650 = sqrt(r5352649);
        return r5352650;
}

double f_id(double x) {
        double r5352651 = 2.0;
        double r5352652 = x;
        double r5352653 = r5352651 * r5352652;
        double r5352654 = exp(r5352653);
        double r5352655 = 1.0;
        double r5352656 = r5352654 - r5352655;
        double r5352657 = exp(r5352652);
        double r5352658 = r5352657 - r5352655;
        double r5352659 = r5352656 / r5352658;
        double r5352660 = sqrt(r5352659);
        return r5352660;
}


double f_of(float x) {
        float r5352661 = x;
        float r5352662 = -3.043772507835201e-13f;
        bool r5352663 = r5352661 <= r5352662;
        float r5352664 = 2.0f;
        float r5352665 = r5352664 * r5352661;
        float r5352666 = exp(r5352665);
        float r5352667 = sqrt(r5352666);
        float r5352668 = 1.0f;
        float r5352669 = r5352667 + r5352668;
        float r5352670 = r5352667 - r5352668;
        float r5352671 = r5352669 * r5352670;
        float r5352672 = exp(r5352661);
        float r5352673 = r5352672 - r5352668;
        float r5352674 = r5352671 / r5352673;
        float r5352675 = sqrt(r5352674);
        float r5352676 = sqrt(r5352664);
        float r5352677 = 0.5f;
        float r5352678 = r5352677 * r5352661;
        float r5352679 = r5352678 / r5352676;
        float r5352680 = r5352676 + r5352679;
        float r5352681 = r5352661 * r5352661;
        float r5352682 = r5352681 / r5352676;
        float r5352683 = 0.125f;
        float r5352684 = r5352683 / r5352664;
        float r5352685 = 0.25f;
        float r5352686 = r5352684 - r5352685;
        float r5352687 = r5352682 * r5352686;
        float r5352688 = r5352680 - r5352687;
        float r5352689 = r5352663 ? r5352675 : r5352688;
        return r5352689;
}

double f_od(double x) {
        double r5352690 = x;
        double r5352691 = -3.043772507835201e-13;
        bool r5352692 = r5352690 <= r5352691;
        double r5352693 = 2.0;
        double r5352694 = r5352693 * r5352690;
        double r5352695 = exp(r5352694);
        double r5352696 = sqrt(r5352695);
        double r5352697 = 1.0;
        double r5352698 = r5352696 + r5352697;
        double r5352699 = r5352696 - r5352697;
        double r5352700 = r5352698 * r5352699;
        double r5352701 = exp(r5352690);
        double r5352702 = r5352701 - r5352697;
        double r5352703 = r5352700 / r5352702;
        double r5352704 = sqrt(r5352703);
        double r5352705 = sqrt(r5352693);
        double r5352706 = 0.5;
        double r5352707 = r5352706 * r5352690;
        double r5352708 = r5352707 / r5352705;
        double r5352709 = r5352705 + r5352708;
        double r5352710 = r5352690 * r5352690;
        double r5352711 = r5352710 / r5352705;
        double r5352712 = 0.125;
        double r5352713 = r5352712 / r5352693;
        double r5352714 = 0.25;
        double r5352715 = r5352713 - r5352714;
        double r5352716 = r5352711 * r5352715;
        double r5352717 = r5352709 - r5352716;
        double r5352718 = r5352692 ? r5352704 : r5352717;
        return r5352718;
}

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 r5352719, r5352720, r5352721, r5352722, r5352723, r5352724, r5352725, r5352726, r5352727, r5352728;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5352719, "2", 10, MPFR_RNDN);
        mpfr_init(r5352720);
        mpfr_init(r5352721);
        mpfr_init(r5352722);
        mpfr_init_set_str(r5352723, "1", 10, MPFR_RNDN);
        mpfr_init(r5352724);
        mpfr_init(r5352725);
        mpfr_init(r5352726);
        mpfr_init(r5352727);
        mpfr_init(r5352728);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5352720, x, MPFR_RNDN);
        mpfr_mul(r5352721, r5352719, r5352720, MPFR_RNDN);
        mpfr_exp(r5352722, r5352721, MPFR_RNDN);
        ;
        mpfr_sub(r5352724, r5352722, r5352723, MPFR_RNDN);
        mpfr_exp(r5352725, r5352720, MPFR_RNDN);
        mpfr_sub(r5352726, r5352725, r5352723, MPFR_RNDN);
        mpfr_div(r5352727, r5352724, r5352726, MPFR_RNDN);
        mpfr_sqrt(r5352728, r5352727, MPFR_RNDN);
        return mpfr_get_d(r5352728, MPFR_RNDN);
}

static mpfr_t r5352729, r5352730, r5352731, r5352732, r5352733, r5352734, r5352735, r5352736, r5352737, r5352738, r5352739, r5352740, r5352741, r5352742, r5352743, r5352744, r5352745, r5352746, r5352747, r5352748, r5352749, r5352750, r5352751, r5352752, r5352753, r5352754, r5352755, r5352756, r5352757;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5352729);
        mpfr_init_set_str(r5352730, "-3.043772507835201e-13", 10, MPFR_RNDN);
        mpfr_init(r5352731);
        mpfr_init_set_str(r5352732, "2", 10, MPFR_RNDN);
        mpfr_init(r5352733);
        mpfr_init(r5352734);
        mpfr_init(r5352735);
        mpfr_init_set_str(r5352736, "1", 10, MPFR_RNDN);
        mpfr_init(r5352737);
        mpfr_init(r5352738);
        mpfr_init(r5352739);
        mpfr_init(r5352740);
        mpfr_init(r5352741);
        mpfr_init(r5352742);
        mpfr_init(r5352743);
        mpfr_init(r5352744);
        mpfr_init_set_str(r5352745, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5352746);
        mpfr_init(r5352747);
        mpfr_init(r5352748);
        mpfr_init(r5352749);
        mpfr_init(r5352750);
        mpfr_init_set_str(r5352751, "1/8", 10, MPFR_RNDN);
        mpfr_init(r5352752);
        mpfr_init_set_str(r5352753, "1/4", 10, MPFR_RNDN);
        mpfr_init(r5352754);
        mpfr_init(r5352755);
        mpfr_init(r5352756);
        mpfr_init(r5352757);
}

double f_fm(double x) {
        mpfr_set_d(r5352729, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5352731, mpfr_cmp(r5352729, r5352730) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5352733, r5352732, r5352729, MPFR_RNDN);
        mpfr_exp(r5352734, r5352733, MPFR_RNDN);
        mpfr_sqrt(r5352735, r5352734, MPFR_RNDN);
        ;
        mpfr_add(r5352737, r5352735, r5352736, MPFR_RNDN);
        mpfr_sub(r5352738, r5352735, r5352736, MPFR_RNDN);
        mpfr_mul(r5352739, r5352737, r5352738, MPFR_RNDN);
        mpfr_exp(r5352740, r5352729, MPFR_RNDN);
        mpfr_sub(r5352741, r5352740, r5352736, MPFR_RNDN);
        mpfr_div(r5352742, r5352739, r5352741, MPFR_RNDN);
        mpfr_sqrt(r5352743, r5352742, MPFR_RNDN);
        mpfr_sqrt(r5352744, r5352732, MPFR_RNDN);
        ;
        mpfr_mul(r5352746, r5352745, r5352729, MPFR_RNDN);
        mpfr_div(r5352747, r5352746, r5352744, MPFR_RNDN);
        mpfr_add(r5352748, r5352744, r5352747, MPFR_RNDN);
        mpfr_sqr(r5352749, r5352729, MPFR_RNDN);
        mpfr_div(r5352750, r5352749, r5352744, MPFR_RNDN);
        ;
        mpfr_div(r5352752, r5352751, r5352732, MPFR_RNDN);
        ;
        mpfr_sub(r5352754, r5352752, r5352753, MPFR_RNDN);
        mpfr_mul(r5352755, r5352750, r5352754, MPFR_RNDN);
        mpfr_sub(r5352756, r5352748, r5352755, MPFR_RNDN);
        if (mpfr_get_si(r5352731, MPFR_RNDN)) { mpfr_set(r5352757, r5352743, MPFR_RNDN); } else { mpfr_set(r5352757, r5352756, MPFR_RNDN); };
        return mpfr_get_d(r5352757, MPFR_RNDN);
}

static mpfr_t r5352758, r5352759, r5352760, r5352761, r5352762, r5352763, r5352764, r5352765, r5352766, r5352767, r5352768, r5352769, r5352770, r5352771, r5352772, r5352773, r5352774, r5352775, r5352776, r5352777, r5352778, r5352779, r5352780, r5352781, r5352782, r5352783, r5352784, r5352785, r5352786;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5352758);
        mpfr_init_set_str(r5352759, "-3.043772507835201e-13", 10, MPFR_RNDN);
        mpfr_init(r5352760);
        mpfr_init_set_str(r5352761, "2", 10, MPFR_RNDN);
        mpfr_init(r5352762);
        mpfr_init(r5352763);
        mpfr_init(r5352764);
        mpfr_init_set_str(r5352765, "1", 10, MPFR_RNDN);
        mpfr_init(r5352766);
        mpfr_init(r5352767);
        mpfr_init(r5352768);
        mpfr_init(r5352769);
        mpfr_init(r5352770);
        mpfr_init(r5352771);
        mpfr_init(r5352772);
        mpfr_init(r5352773);
        mpfr_init_set_str(r5352774, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5352775);
        mpfr_init(r5352776);
        mpfr_init(r5352777);
        mpfr_init(r5352778);
        mpfr_init(r5352779);
        mpfr_init_set_str(r5352780, "1/8", 10, MPFR_RNDN);
        mpfr_init(r5352781);
        mpfr_init_set_str(r5352782, "1/4", 10, MPFR_RNDN);
        mpfr_init(r5352783);
        mpfr_init(r5352784);
        mpfr_init(r5352785);
        mpfr_init(r5352786);
}

double f_dm(double x) {
        mpfr_set_d(r5352758, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5352760, mpfr_cmp(r5352758, r5352759) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5352762, r5352761, r5352758, MPFR_RNDN);
        mpfr_exp(r5352763, r5352762, MPFR_RNDN);
        mpfr_sqrt(r5352764, r5352763, MPFR_RNDN);
        ;
        mpfr_add(r5352766, r5352764, r5352765, MPFR_RNDN);
        mpfr_sub(r5352767, r5352764, r5352765, MPFR_RNDN);
        mpfr_mul(r5352768, r5352766, r5352767, MPFR_RNDN);
        mpfr_exp(r5352769, r5352758, MPFR_RNDN);
        mpfr_sub(r5352770, r5352769, r5352765, MPFR_RNDN);
        mpfr_div(r5352771, r5352768, r5352770, MPFR_RNDN);
        mpfr_sqrt(r5352772, r5352771, MPFR_RNDN);
        mpfr_sqrt(r5352773, r5352761, MPFR_RNDN);
        ;
        mpfr_mul(r5352775, r5352774, r5352758, MPFR_RNDN);
        mpfr_div(r5352776, r5352775, r5352773, MPFR_RNDN);
        mpfr_add(r5352777, r5352773, r5352776, MPFR_RNDN);
        mpfr_sqr(r5352778, r5352758, MPFR_RNDN);
        mpfr_div(r5352779, r5352778, r5352773, MPFR_RNDN);
        ;
        mpfr_div(r5352781, r5352780, r5352761, MPFR_RNDN);
        ;
        mpfr_sub(r5352783, r5352781, r5352782, MPFR_RNDN);
        mpfr_mul(r5352784, r5352779, r5352783, MPFR_RNDN);
        mpfr_sub(r5352785, r5352777, r5352784, MPFR_RNDN);
        if (mpfr_get_si(r5352760, MPFR_RNDN)) { mpfr_set(r5352786, r5352772, MPFR_RNDN); } else { mpfr_set(r5352786, r5352785, MPFR_RNDN); };
        return mpfr_get_d(r5352786, MPFR_RNDN);
}

