#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 r4620163 = x;
        float r4620164 = 1.0f;
        float r4620165 = r4620163 + r4620164;
        float r4620166 = sqrt(r4620165);
        float r4620167 = sqrt(r4620163);
        float r4620168 = r4620166 - r4620167;
        return r4620168;
}

double f_id(double x) {
        double r4620169 = x;
        double r4620170 = 1.0;
        double r4620171 = r4620169 + r4620170;
        double r4620172 = sqrt(r4620171);
        double r4620173 = sqrt(r4620169);
        double r4620174 = r4620172 - r4620173;
        return r4620174;
}


double f_of(float x) {
        float r4620175 = 1.0f;
        float r4620176 = x;
        float r4620177 = r4620176 + r4620175;
        float r4620178 = sqrt(r4620177);
        float r4620179 = sqrt(r4620176);
        float r4620180 = r4620178 + r4620179;
        float r4620181 = r4620175 / r4620180;
        return r4620181;
}

double f_od(double x) {
        double r4620182 = 1.0;
        double r4620183 = x;
        double r4620184 = r4620183 + r4620182;
        double r4620185 = sqrt(r4620184);
        double r4620186 = sqrt(r4620183);
        double r4620187 = r4620185 + r4620186;
        double r4620188 = r4620182 / r4620187;
        return r4620188;
}

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 r4620189, r4620190, r4620191, r4620192, r4620193, r4620194;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4620189);
        mpfr_init_set_str(r4620190, "1", 10, MPFR_RNDN);
        mpfr_init(r4620191);
        mpfr_init(r4620192);
        mpfr_init(r4620193);
        mpfr_init(r4620194);
}

double f_im(double x) {
        mpfr_set_d(r4620189, x, MPFR_RNDN);
        ;
        mpfr_add(r4620191, r4620189, r4620190, MPFR_RNDN);
        mpfr_sqrt(r4620192, r4620191, MPFR_RNDN);
        mpfr_sqrt(r4620193, r4620189, MPFR_RNDN);
        mpfr_sub(r4620194, r4620192, r4620193, MPFR_RNDN);
        return mpfr_get_d(r4620194, MPFR_RNDN);
}

static mpfr_t r4620195, r4620196, r4620197, r4620198, r4620199, r4620200, r4620201;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4620195, "1", 10, MPFR_RNDN);
        mpfr_init(r4620196);
        mpfr_init(r4620197);
        mpfr_init(r4620198);
        mpfr_init(r4620199);
        mpfr_init(r4620200);
        mpfr_init(r4620201);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4620196, x, MPFR_RNDN);
        mpfr_add(r4620197, r4620196, r4620195, MPFR_RNDN);
        mpfr_sqrt(r4620198, r4620197, MPFR_RNDN);
        mpfr_sqrt(r4620199, r4620196, MPFR_RNDN);
        mpfr_add(r4620200, r4620198, r4620199, MPFR_RNDN);
        mpfr_div(r4620201, r4620195, r4620200, MPFR_RNDN);
        return mpfr_get_d(r4620201, MPFR_RNDN);
}

static mpfr_t r4620202, r4620203, r4620204, r4620205, r4620206, r4620207, r4620208;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4620202, "1", 10, MPFR_RNDN);
        mpfr_init(r4620203);
        mpfr_init(r4620204);
        mpfr_init(r4620205);
        mpfr_init(r4620206);
        mpfr_init(r4620207);
        mpfr_init(r4620208);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4620203, x, MPFR_RNDN);
        mpfr_add(r4620204, r4620203, r4620202, MPFR_RNDN);
        mpfr_sqrt(r4620205, r4620204, MPFR_RNDN);
        mpfr_sqrt(r4620206, r4620203, MPFR_RNDN);
        mpfr_add(r4620207, r4620205, r4620206, MPFR_RNDN);
        mpfr_div(r4620208, r4620202, r4620207, MPFR_RNDN);
        return mpfr_get_d(r4620208, MPFR_RNDN);
}

