#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 r5041924 = x;
        float r5041925 = 1.0f;
        float r5041926 = r5041924 + r5041925;
        float r5041927 = sqrt(r5041926);
        float r5041928 = sqrt(r5041924);
        float r5041929 = r5041927 - r5041928;
        return r5041929;
}

double f_id(double x) {
        double r5041930 = x;
        double r5041931 = 1.0;
        double r5041932 = r5041930 + r5041931;
        double r5041933 = sqrt(r5041932);
        double r5041934 = sqrt(r5041930);
        double r5041935 = r5041933 - r5041934;
        return r5041935;
}


double f_of(float x) {
        float r5041936 = 1.0f;
        float r5041937 = x;
        float r5041938 = r5041937 + r5041936;
        float r5041939 = sqrt(r5041938);
        float r5041940 = sqrt(r5041937);
        float r5041941 = r5041939 + r5041940;
        float r5041942 = r5041936 / r5041941;
        return r5041942;
}

double f_od(double x) {
        double r5041943 = 1.0;
        double r5041944 = x;
        double r5041945 = r5041944 + r5041943;
        double r5041946 = sqrt(r5041945);
        double r5041947 = sqrt(r5041944);
        double r5041948 = r5041946 + r5041947;
        double r5041949 = r5041943 / r5041948;
        return r5041949;
}

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 r5041950, r5041951, r5041952, r5041953, r5041954, r5041955;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5041950);
        mpfr_init_set_str(r5041951, "1", 10, MPFR_RNDN);
        mpfr_init(r5041952);
        mpfr_init(r5041953);
        mpfr_init(r5041954);
        mpfr_init(r5041955);
}

double f_im(double x) {
        mpfr_set_d(r5041950, x, MPFR_RNDN);
        ;
        mpfr_add(r5041952, r5041950, r5041951, MPFR_RNDN);
        mpfr_sqrt(r5041953, r5041952, MPFR_RNDN);
        mpfr_sqrt(r5041954, r5041950, MPFR_RNDN);
        mpfr_sub(r5041955, r5041953, r5041954, MPFR_RNDN);
        return mpfr_get_d(r5041955, MPFR_RNDN);
}

static mpfr_t r5041956, r5041957, r5041958, r5041959, r5041960, r5041961, r5041962;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041956, "1", 10, MPFR_RNDN);
        mpfr_init(r5041957);
        mpfr_init(r5041958);
        mpfr_init(r5041959);
        mpfr_init(r5041960);
        mpfr_init(r5041961);
        mpfr_init(r5041962);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5041957, x, MPFR_RNDN);
        mpfr_add(r5041958, r5041957, r5041956, MPFR_RNDN);
        mpfr_sqrt(r5041959, r5041958, MPFR_RNDN);
        mpfr_sqrt(r5041960, r5041957, MPFR_RNDN);
        mpfr_add(r5041961, r5041959, r5041960, MPFR_RNDN);
        mpfr_div(r5041962, r5041956, r5041961, MPFR_RNDN);
        return mpfr_get_d(r5041962, MPFR_RNDN);
}

static mpfr_t r5041963, r5041964, r5041965, r5041966, r5041967, r5041968, r5041969;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041963, "1", 10, MPFR_RNDN);
        mpfr_init(r5041964);
        mpfr_init(r5041965);
        mpfr_init(r5041966);
        mpfr_init(r5041967);
        mpfr_init(r5041968);
        mpfr_init(r5041969);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5041964, x, MPFR_RNDN);
        mpfr_add(r5041965, r5041964, r5041963, MPFR_RNDN);
        mpfr_sqrt(r5041966, r5041965, MPFR_RNDN);
        mpfr_sqrt(r5041967, r5041964, MPFR_RNDN);
        mpfr_add(r5041968, r5041966, r5041967, MPFR_RNDN);
        mpfr_div(r5041969, r5041963, r5041968, MPFR_RNDN);
        return mpfr_get_d(r5041969, MPFR_RNDN);
}

