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

char *name = "NMSE example 3.10";

double f_if(float x) {
        float r5355142 = 1.0f;
        float r5355143 = x;
        float r5355144 = r5355142 - r5355143;
        float r5355145 = log(r5355144);
        float r5355146 = r5355142 + r5355143;
        float r5355147 = log(r5355146);
        float r5355148 = r5355145 / r5355147;
        return r5355148;
}

double f_id(double x) {
        double r5355149 = 1.0;
        double r5355150 = x;
        double r5355151 = r5355149 - r5355150;
        double r5355152 = log(r5355151);
        double r5355153 = r5355149 + r5355150;
        double r5355154 = log(r5355153);
        double r5355155 = r5355152 / r5355154;
        return r5355155;
}


double f_of(float x) {
        float r5355156 = 0.5f;
        float r5355157 = x;
        float r5355158 = r5355157 * r5355157;
        float r5355159 = r5355156 * r5355158;
        float r5355160 = 1.0f;
        float r5355161 = r5355160 + r5355157;
        float r5355162 = r5355159 + r5355161;
        float r5355163 = -r5355162;
        return r5355163;
}

double f_od(double x) {
        double r5355164 = 0.5;
        double r5355165 = x;
        double r5355166 = r5355165 * r5355165;
        double r5355167 = r5355164 * r5355166;
        double r5355168 = 1.0;
        double r5355169 = r5355168 + r5355165;
        double r5355170 = r5355167 + r5355169;
        double r5355171 = -r5355170;
        return r5355171;
}

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 r5355172, r5355173, r5355174, r5355175, r5355176, r5355177, r5355178;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5355172, "1", 10, MPFR_RNDN);
        mpfr_init(r5355173);
        mpfr_init(r5355174);
        mpfr_init(r5355175);
        mpfr_init(r5355176);
        mpfr_init(r5355177);
        mpfr_init(r5355178);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5355173, x, MPFR_RNDN);
        mpfr_sub(r5355174, r5355172, r5355173, MPFR_RNDN);
        mpfr_log(r5355175, r5355174, MPFR_RNDN);
        mpfr_add(r5355176, r5355172, r5355173, MPFR_RNDN);
        mpfr_log(r5355177, r5355176, MPFR_RNDN);
        mpfr_div(r5355178, r5355175, r5355177, MPFR_RNDN);
        return mpfr_get_d(r5355178, MPFR_RNDN);
}

static mpfr_t r5355179, r5355180, r5355181, r5355182, r5355183, r5355184, r5355185, r5355186;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5355179, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5355180);
        mpfr_init(r5355181);
        mpfr_init(r5355182);
        mpfr_init_set_str(r5355183, "1", 10, MPFR_RNDN);
        mpfr_init(r5355184);
        mpfr_init(r5355185);
        mpfr_init(r5355186);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5355180, x, MPFR_RNDN);
        mpfr_sqr(r5355181, r5355180, MPFR_RNDN);
        mpfr_mul(r5355182, r5355179, r5355181, MPFR_RNDN);
        ;
        mpfr_add(r5355184, r5355183, r5355180, MPFR_RNDN);
        mpfr_add(r5355185, r5355182, r5355184, MPFR_RNDN);
        mpfr_neg(r5355186, r5355185, MPFR_RNDN);
        return mpfr_get_d(r5355186, MPFR_RNDN);
}

static mpfr_t r5355187, r5355188, r5355189, r5355190, r5355191, r5355192, r5355193, r5355194;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5355187, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5355188);
        mpfr_init(r5355189);
        mpfr_init(r5355190);
        mpfr_init_set_str(r5355191, "1", 10, MPFR_RNDN);
        mpfr_init(r5355192);
        mpfr_init(r5355193);
        mpfr_init(r5355194);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5355188, x, MPFR_RNDN);
        mpfr_sqr(r5355189, r5355188, MPFR_RNDN);
        mpfr_mul(r5355190, r5355187, r5355189, MPFR_RNDN);
        ;
        mpfr_add(r5355192, r5355191, r5355188, MPFR_RNDN);
        mpfr_add(r5355193, r5355190, r5355192, MPFR_RNDN);
        mpfr_neg(r5355194, r5355193, MPFR_RNDN);
        return mpfr_get_d(r5355194, MPFR_RNDN);
}

