#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 r4775699 = 1.0f;
        float r4775700 = x;
        float r4775701 = sqrt(r4775700);
        float r4775702 = r4775699 / r4775701;
        float r4775703 = r4775700 + r4775699;
        float r4775704 = sqrt(r4775703);
        float r4775705 = r4775699 / r4775704;
        float r4775706 = r4775702 - r4775705;
        return r4775706;
}

double f_id(double x) {
        double r4775707 = 1.0;
        double r4775708 = x;
        double r4775709 = sqrt(r4775708);
        double r4775710 = r4775707 / r4775709;
        double r4775711 = r4775708 + r4775707;
        double r4775712 = sqrt(r4775711);
        double r4775713 = r4775707 / r4775712;
        double r4775714 = r4775710 - r4775713;
        return r4775714;
}


double f_of(float x) {
        float r4775715 = 1.0f;
        float r4775716 = x;
        float r4775717 = r4775715 + r4775716;
        float r4775718 = sqrt(r4775717);
        float r4775719 = sqrt(r4775716);
        float r4775720 = r4775718 + r4775719;
        float r4775721 = r4775715 / r4775720;
        float r4775722 = r4775721 / r4775719;
        float r4775723 = r4775716 + r4775715;
        float r4775724 = sqrt(r4775723);
        float r4775725 = r4775722 / r4775724;
        return r4775725;
}

double f_od(double x) {
        double r4775726 = 1.0;
        double r4775727 = x;
        double r4775728 = r4775726 + r4775727;
        double r4775729 = sqrt(r4775728);
        double r4775730 = sqrt(r4775727);
        double r4775731 = r4775729 + r4775730;
        double r4775732 = r4775726 / r4775731;
        double r4775733 = r4775732 / r4775730;
        double r4775734 = r4775727 + r4775726;
        double r4775735 = sqrt(r4775734);
        double r4775736 = r4775733 / r4775735;
        return r4775736;
}

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 r4775737, r4775738, r4775739, r4775740, r4775741, r4775742, r4775743, r4775744;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4775737, "1", 10, MPFR_RNDN);
        mpfr_init(r4775738);
        mpfr_init(r4775739);
        mpfr_init(r4775740);
        mpfr_init(r4775741);
        mpfr_init(r4775742);
        mpfr_init(r4775743);
        mpfr_init(r4775744);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4775738, x, MPFR_RNDN);
        mpfr_sqrt(r4775739, r4775738, MPFR_RNDN);
        mpfr_div(r4775740, r4775737, r4775739, MPFR_RNDN);
        mpfr_add(r4775741, r4775738, r4775737, MPFR_RNDN);
        mpfr_sqrt(r4775742, r4775741, MPFR_RNDN);
        mpfr_div(r4775743, r4775737, r4775742, MPFR_RNDN);
        mpfr_sub(r4775744, r4775740, r4775743, MPFR_RNDN);
        return mpfr_get_d(r4775744, MPFR_RNDN);
}

static mpfr_t r4775745, r4775746, r4775747, r4775748, r4775749, r4775750, r4775751, r4775752, r4775753, r4775754, r4775755;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4775745, "1", 10, MPFR_RNDN);
        mpfr_init(r4775746);
        mpfr_init(r4775747);
        mpfr_init(r4775748);
        mpfr_init(r4775749);
        mpfr_init(r4775750);
        mpfr_init(r4775751);
        mpfr_init(r4775752);
        mpfr_init(r4775753);
        mpfr_init(r4775754);
        mpfr_init(r4775755);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4775746, x, MPFR_RNDN);
        mpfr_add(r4775747, r4775745, r4775746, MPFR_RNDN);
        mpfr_sqrt(r4775748, r4775747, MPFR_RNDN);
        mpfr_sqrt(r4775749, r4775746, MPFR_RNDN);
        mpfr_add(r4775750, r4775748, r4775749, MPFR_RNDN);
        mpfr_div(r4775751, r4775745, r4775750, MPFR_RNDN);
        mpfr_div(r4775752, r4775751, r4775749, MPFR_RNDN);
        mpfr_add(r4775753, r4775746, r4775745, MPFR_RNDN);
        mpfr_sqrt(r4775754, r4775753, MPFR_RNDN);
        mpfr_div(r4775755, r4775752, r4775754, MPFR_RNDN);
        return mpfr_get_d(r4775755, MPFR_RNDN);
}

static mpfr_t r4775756, r4775757, r4775758, r4775759, r4775760, r4775761, r4775762, r4775763, r4775764, r4775765, r4775766;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4775756, "1", 10, MPFR_RNDN);
        mpfr_init(r4775757);
        mpfr_init(r4775758);
        mpfr_init(r4775759);
        mpfr_init(r4775760);
        mpfr_init(r4775761);
        mpfr_init(r4775762);
        mpfr_init(r4775763);
        mpfr_init(r4775764);
        mpfr_init(r4775765);
        mpfr_init(r4775766);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4775757, x, MPFR_RNDN);
        mpfr_add(r4775758, r4775756, r4775757, MPFR_RNDN);
        mpfr_sqrt(r4775759, r4775758, MPFR_RNDN);
        mpfr_sqrt(r4775760, r4775757, MPFR_RNDN);
        mpfr_add(r4775761, r4775759, r4775760, MPFR_RNDN);
        mpfr_div(r4775762, r4775756, r4775761, MPFR_RNDN);
        mpfr_div(r4775763, r4775762, r4775760, MPFR_RNDN);
        mpfr_add(r4775764, r4775757, r4775756, MPFR_RNDN);
        mpfr_sqrt(r4775765, r4775764, MPFR_RNDN);
        mpfr_div(r4775766, r4775763, r4775765, MPFR_RNDN);
        return mpfr_get_d(r4775766, MPFR_RNDN);
}

