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

char *name = "NMSE example 3.6";

double f_if(float x) {
        float r5041585 = 1.0f;
        float r5041586 = x;
        float r5041587 = sqrt(r5041586);
        float r5041588 = r5041585 / r5041587;
        float r5041589 = r5041586 + r5041585;
        float r5041590 = sqrt(r5041589);
        float r5041591 = r5041585 / r5041590;
        float r5041592 = r5041588 - r5041591;
        return r5041592;
}

double f_id(double x) {
        double r5041593 = 1.0;
        double r5041594 = x;
        double r5041595 = sqrt(r5041594);
        double r5041596 = r5041593 / r5041595;
        double r5041597 = r5041594 + r5041593;
        double r5041598 = sqrt(r5041597);
        double r5041599 = r5041593 / r5041598;
        double r5041600 = r5041596 - r5041599;
        return r5041600;
}


double f_of(float x) {
        float r5041601 = 1.0f;
        float r5041602 = x;
        float r5041603 = r5041601 + r5041602;
        float r5041604 = sqrt(r5041603);
        float r5041605 = sqrt(r5041602);
        float r5041606 = r5041604 + r5041605;
        float r5041607 = r5041601 / r5041606;
        float r5041608 = sqrt(r5041605);
        float r5041609 = r5041602 + r5041601;
        float r5041610 = sqrt(r5041609);
        float r5041611 = sqrt(r5041610);
        float r5041612 = r5041608 * r5041611;
        float r5041613 = r5041612 * r5041612;
        float r5041614 = r5041607 / r5041613;
        return r5041614;
}

double f_od(double x) {
        double r5041615 = 1.0;
        double r5041616 = x;
        double r5041617 = r5041615 + r5041616;
        double r5041618 = sqrt(r5041617);
        double r5041619 = sqrt(r5041616);
        double r5041620 = r5041618 + r5041619;
        double r5041621 = r5041615 / r5041620;
        double r5041622 = sqrt(r5041619);
        double r5041623 = r5041616 + r5041615;
        double r5041624 = sqrt(r5041623);
        double r5041625 = sqrt(r5041624);
        double r5041626 = r5041622 * r5041625;
        double r5041627 = r5041626 * r5041626;
        double r5041628 = r5041621 / r5041627;
        return r5041628;
}

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 r5041629, r5041630, r5041631, r5041632, r5041633, r5041634, r5041635, r5041636;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041629, "1", 10, MPFR_RNDN);
        mpfr_init(r5041630);
        mpfr_init(r5041631);
        mpfr_init(r5041632);
        mpfr_init(r5041633);
        mpfr_init(r5041634);
        mpfr_init(r5041635);
        mpfr_init(r5041636);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5041630, x, MPFR_RNDN);
        mpfr_sqrt(r5041631, r5041630, MPFR_RNDN);
        mpfr_div(r5041632, r5041629, r5041631, MPFR_RNDN);
        mpfr_add(r5041633, r5041630, r5041629, MPFR_RNDN);
        mpfr_sqrt(r5041634, r5041633, MPFR_RNDN);
        mpfr_div(r5041635, r5041629, r5041634, MPFR_RNDN);
        mpfr_sub(r5041636, r5041632, r5041635, MPFR_RNDN);
        return mpfr_get_d(r5041636, MPFR_RNDN);
}

static mpfr_t r5041637, r5041638, r5041639, r5041640, r5041641, r5041642, r5041643, r5041644, r5041645, r5041646, r5041647, r5041648, r5041649, r5041650;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041637, "1", 10, MPFR_RNDN);
        mpfr_init(r5041638);
        mpfr_init(r5041639);
        mpfr_init(r5041640);
        mpfr_init(r5041641);
        mpfr_init(r5041642);
        mpfr_init(r5041643);
        mpfr_init(r5041644);
        mpfr_init(r5041645);
        mpfr_init(r5041646);
        mpfr_init(r5041647);
        mpfr_init(r5041648);
        mpfr_init(r5041649);
        mpfr_init(r5041650);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5041638, x, MPFR_RNDN);
        mpfr_add(r5041639, r5041637, r5041638, MPFR_RNDN);
        mpfr_sqrt(r5041640, r5041639, MPFR_RNDN);
        mpfr_sqrt(r5041641, r5041638, MPFR_RNDN);
        mpfr_add(r5041642, r5041640, r5041641, MPFR_RNDN);
        mpfr_div(r5041643, r5041637, r5041642, MPFR_RNDN);
        mpfr_sqrt(r5041644, r5041641, MPFR_RNDN);
        mpfr_add(r5041645, r5041638, r5041637, MPFR_RNDN);
        mpfr_sqrt(r5041646, r5041645, MPFR_RNDN);
        mpfr_sqrt(r5041647, r5041646, MPFR_RNDN);
        mpfr_mul(r5041648, r5041644, r5041647, MPFR_RNDN);
        mpfr_sqr(r5041649, r5041648, MPFR_RNDN);
        mpfr_div(r5041650, r5041643, r5041649, MPFR_RNDN);
        return mpfr_get_d(r5041650, MPFR_RNDN);
}

static mpfr_t r5041651, r5041652, r5041653, r5041654, r5041655, r5041656, r5041657, r5041658, r5041659, r5041660, r5041661, r5041662, r5041663, r5041664;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041651, "1", 10, MPFR_RNDN);
        mpfr_init(r5041652);
        mpfr_init(r5041653);
        mpfr_init(r5041654);
        mpfr_init(r5041655);
        mpfr_init(r5041656);
        mpfr_init(r5041657);
        mpfr_init(r5041658);
        mpfr_init(r5041659);
        mpfr_init(r5041660);
        mpfr_init(r5041661);
        mpfr_init(r5041662);
        mpfr_init(r5041663);
        mpfr_init(r5041664);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5041652, x, MPFR_RNDN);
        mpfr_add(r5041653, r5041651, r5041652, MPFR_RNDN);
        mpfr_sqrt(r5041654, r5041653, MPFR_RNDN);
        mpfr_sqrt(r5041655, r5041652, MPFR_RNDN);
        mpfr_add(r5041656, r5041654, r5041655, MPFR_RNDN);
        mpfr_div(r5041657, r5041651, r5041656, MPFR_RNDN);
        mpfr_sqrt(r5041658, r5041655, MPFR_RNDN);
        mpfr_add(r5041659, r5041652, r5041651, MPFR_RNDN);
        mpfr_sqrt(r5041660, r5041659, MPFR_RNDN);
        mpfr_sqrt(r5041661, r5041660, MPFR_RNDN);
        mpfr_mul(r5041662, r5041658, r5041661, MPFR_RNDN);
        mpfr_sqr(r5041663, r5041662, MPFR_RNDN);
        mpfr_div(r5041664, r5041657, r5041663, MPFR_RNDN);
        return mpfr_get_d(r5041664, MPFR_RNDN);
}

