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

char *name = "NMSE example 3.1";

double f_if(float x) {
        float r5355195 = x;
        float r5355196 = 1.0f;
        float r5355197 = r5355195 + r5355196;
        float r5355198 = sqrt(r5355197);
        float r5355199 = sqrt(r5355195);
        float r5355200 = r5355198 - r5355199;
        return r5355200;
}

double f_id(double x) {
        double r5355201 = x;
        double r5355202 = 1.0;
        double r5355203 = r5355201 + r5355202;
        double r5355204 = sqrt(r5355203);
        double r5355205 = sqrt(r5355201);
        double r5355206 = r5355204 - r5355205;
        return r5355206;
}


double f_of(float x) {
        float r5355207 = 1.0f;
        float r5355208 = x;
        float r5355209 = r5355208 + r5355207;
        float r5355210 = sqrt(r5355209);
        float r5355211 = sqrt(r5355208);
        float r5355212 = r5355210 + r5355211;
        float r5355213 = r5355207 / r5355212;
        return r5355213;
}

double f_od(double x) {
        double r5355214 = 1.0;
        double r5355215 = x;
        double r5355216 = r5355215 + r5355214;
        double r5355217 = sqrt(r5355216);
        double r5355218 = sqrt(r5355215);
        double r5355219 = r5355217 + r5355218;
        double r5355220 = r5355214 / r5355219;
        return r5355220;
}

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 r5355221, r5355222, r5355223, r5355224, r5355225, r5355226;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5355221);
        mpfr_init_set_str(r5355222, "1", 10, MPFR_RNDN);
        mpfr_init(r5355223);
        mpfr_init(r5355224);
        mpfr_init(r5355225);
        mpfr_init(r5355226);
}

double f_im(double x) {
        mpfr_set_d(r5355221, x, MPFR_RNDN);
        ;
        mpfr_add(r5355223, r5355221, r5355222, MPFR_RNDN);
        mpfr_sqrt(r5355224, r5355223, MPFR_RNDN);
        mpfr_sqrt(r5355225, r5355221, MPFR_RNDN);
        mpfr_sub(r5355226, r5355224, r5355225, MPFR_RNDN);
        return mpfr_get_d(r5355226, MPFR_RNDN);
}

static mpfr_t r5355227, r5355228, r5355229, r5355230, r5355231, r5355232, r5355233;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5355227, "1", 10, MPFR_RNDN);
        mpfr_init(r5355228);
        mpfr_init(r5355229);
        mpfr_init(r5355230);
        mpfr_init(r5355231);
        mpfr_init(r5355232);
        mpfr_init(r5355233);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5355228, x, MPFR_RNDN);
        mpfr_add(r5355229, r5355228, r5355227, MPFR_RNDN);
        mpfr_sqrt(r5355230, r5355229, MPFR_RNDN);
        mpfr_sqrt(r5355231, r5355228, MPFR_RNDN);
        mpfr_add(r5355232, r5355230, r5355231, MPFR_RNDN);
        mpfr_div(r5355233, r5355227, r5355232, MPFR_RNDN);
        return mpfr_get_d(r5355233, MPFR_RNDN);
}

static mpfr_t r5355234, r5355235, r5355236, r5355237, r5355238, r5355239, r5355240;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5355234, "1", 10, MPFR_RNDN);
        mpfr_init(r5355235);
        mpfr_init(r5355236);
        mpfr_init(r5355237);
        mpfr_init(r5355238);
        mpfr_init(r5355239);
        mpfr_init(r5355240);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5355235, x, MPFR_RNDN);
        mpfr_add(r5355236, r5355235, r5355234, MPFR_RNDN);
        mpfr_sqrt(r5355237, r5355236, MPFR_RNDN);
        mpfr_sqrt(r5355238, r5355235, MPFR_RNDN);
        mpfr_add(r5355239, r5355237, r5355238, MPFR_RNDN);
        mpfr_div(r5355240, r5355234, r5355239, MPFR_RNDN);
        return mpfr_get_d(r5355240, MPFR_RNDN);
}

