#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 r28933 = 1;
        float r28934 = x;
        float r28935 = sqrt(r28934);
        float r28936 = r28933 / r28935;
        float r28937 = r28934 + r28933;
        float r28938 = sqrt(r28937);
        float r28939 = r28933 / r28938;
        float r28940 = r28936 - r28939;
        return r28940;
}

double f_id(double x) {
        double r28941 = 1;
        double r28942 = x;
        double r28943 = sqrt(r28942);
        double r28944 = r28941 / r28943;
        double r28945 = r28942 + r28941;
        double r28946 = sqrt(r28945);
        double r28947 = r28941 / r28946;
        double r28948 = r28944 - r28947;
        return r28948;
}


double f_of(float x) {
        float r28949 = 1;
        float r28950 = x;
        float r28951 = r28950 + r28949;
        float r28952 = sqrt(r28951);
        float r28953 = sqrt(r28950);
        float r28954 = r28952 + r28953;
        float r28955 = r28949 / r28954;
        float r28956 = r28955 / r28953;
        float r28957 = r28956 / r28952;
        return r28957;
}

double f_od(double x) {
        double r28958 = 1;
        double r28959 = x;
        double r28960 = r28959 + r28958;
        double r28961 = sqrt(r28960);
        double r28962 = sqrt(r28959);
        double r28963 = r28961 + r28962;
        double r28964 = r28958 / r28963;
        double r28965 = r28964 / r28962;
        double r28966 = r28965 / r28961;
        return r28966;
}

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 r28967, r28968, r28969, r28970, r28971, r28972, r28973, r28974;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r28967, "1", 10, MPFR_RNDN);
        mpfr_init(r28968);
        mpfr_init(r28969);
        mpfr_init(r28970);
        mpfr_init(r28971);
        mpfr_init(r28972);
        mpfr_init(r28973);
        mpfr_init(r28974);
}

double f_im(double x) {
        ;
        mpfr_set_d(r28968, x, MPFR_RNDN);
        mpfr_sqrt(r28969, r28968, MPFR_RNDN);
        mpfr_div(r28970, r28967, r28969, MPFR_RNDN);
        mpfr_add(r28971, r28968, r28967, MPFR_RNDN);
        mpfr_sqrt(r28972, r28971, MPFR_RNDN);
        mpfr_div(r28973, r28967, r28972, MPFR_RNDN);
        mpfr_sub(r28974, r28970, r28973, MPFR_RNDN);
        return mpfr_get_d(r28974, MPFR_RNDN);
}

static mpfr_t r28975, r28976, r28977, r28978, r28979, r28980, r28981, r28982, r28983;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r28975, "1", 10, MPFR_RNDN);
        mpfr_init(r28976);
        mpfr_init(r28977);
        mpfr_init(r28978);
        mpfr_init(r28979);
        mpfr_init(r28980);
        mpfr_init(r28981);
        mpfr_init(r28982);
        mpfr_init(r28983);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r28976, x, MPFR_RNDN);
        mpfr_add(r28977, r28976, r28975, MPFR_RNDN);
        mpfr_sqrt(r28978, r28977, MPFR_RNDN);
        mpfr_sqrt(r28979, r28976, MPFR_RNDN);
        mpfr_add(r28980, r28978, r28979, MPFR_RNDN);
        mpfr_div(r28981, r28975, r28980, MPFR_RNDN);
        mpfr_div(r28982, r28981, r28979, MPFR_RNDN);
        mpfr_div(r28983, r28982, r28978, MPFR_RNDN);
        return mpfr_get_d(r28983, MPFR_RNDN);
}

static mpfr_t r28984, r28985, r28986, r28987, r28988, r28989, r28990, r28991, r28992;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r28984, "1", 10, MPFR_RNDN);
        mpfr_init(r28985);
        mpfr_init(r28986);
        mpfr_init(r28987);
        mpfr_init(r28988);
        mpfr_init(r28989);
        mpfr_init(r28990);
        mpfr_init(r28991);
        mpfr_init(r28992);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r28985, x, MPFR_RNDN);
        mpfr_add(r28986, r28985, r28984, MPFR_RNDN);
        mpfr_sqrt(r28987, r28986, MPFR_RNDN);
        mpfr_sqrt(r28988, r28985, MPFR_RNDN);
        mpfr_add(r28989, r28987, r28988, MPFR_RNDN);
        mpfr_div(r28990, r28984, r28989, MPFR_RNDN);
        mpfr_div(r28991, r28990, r28988, MPFR_RNDN);
        mpfr_div(r28992, r28991, r28987, MPFR_RNDN);
        return mpfr_get_d(r28992, MPFR_RNDN);
}

