#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 r4620110 = 1.0f;
        float r4620111 = x;
        float r4620112 = r4620110 - r4620111;
        float r4620113 = log(r4620112);
        float r4620114 = r4620110 + r4620111;
        float r4620115 = log(r4620114);
        float r4620116 = r4620113 / r4620115;
        return r4620116;
}

double f_id(double x) {
        double r4620117 = 1.0;
        double r4620118 = x;
        double r4620119 = r4620117 - r4620118;
        double r4620120 = log(r4620119);
        double r4620121 = r4620117 + r4620118;
        double r4620122 = log(r4620121);
        double r4620123 = r4620120 / r4620122;
        return r4620123;
}


double f_of(float x) {
        float r4620124 = 0.5f;
        float r4620125 = x;
        float r4620126 = r4620125 * r4620125;
        float r4620127 = r4620124 * r4620126;
        float r4620128 = 1.0f;
        float r4620129 = r4620128 + r4620125;
        float r4620130 = r4620127 + r4620129;
        float r4620131 = -r4620130;
        return r4620131;
}

double f_od(double x) {
        double r4620132 = 0.5;
        double r4620133 = x;
        double r4620134 = r4620133 * r4620133;
        double r4620135 = r4620132 * r4620134;
        double r4620136 = 1.0;
        double r4620137 = r4620136 + r4620133;
        double r4620138 = r4620135 + r4620137;
        double r4620139 = -r4620138;
        return r4620139;
}

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 r4620140, r4620141, r4620142, r4620143, r4620144, r4620145, r4620146;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4620140, "1", 10, MPFR_RNDN);
        mpfr_init(r4620141);
        mpfr_init(r4620142);
        mpfr_init(r4620143);
        mpfr_init(r4620144);
        mpfr_init(r4620145);
        mpfr_init(r4620146);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4620141, x, MPFR_RNDN);
        mpfr_sub(r4620142, r4620140, r4620141, MPFR_RNDN);
        mpfr_log(r4620143, r4620142, MPFR_RNDN);
        mpfr_add(r4620144, r4620140, r4620141, MPFR_RNDN);
        mpfr_log(r4620145, r4620144, MPFR_RNDN);
        mpfr_div(r4620146, r4620143, r4620145, MPFR_RNDN);
        return mpfr_get_d(r4620146, MPFR_RNDN);
}

static mpfr_t r4620147, r4620148, r4620149, r4620150, r4620151, r4620152, r4620153, r4620154;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4620147, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4620148);
        mpfr_init(r4620149);
        mpfr_init(r4620150);
        mpfr_init_set_str(r4620151, "1", 10, MPFR_RNDN);
        mpfr_init(r4620152);
        mpfr_init(r4620153);
        mpfr_init(r4620154);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4620148, x, MPFR_RNDN);
        mpfr_sqr(r4620149, r4620148, MPFR_RNDN);
        mpfr_mul(r4620150, r4620147, r4620149, MPFR_RNDN);
        ;
        mpfr_add(r4620152, r4620151, r4620148, MPFR_RNDN);
        mpfr_add(r4620153, r4620150, r4620152, MPFR_RNDN);
        mpfr_neg(r4620154, r4620153, MPFR_RNDN);
        return mpfr_get_d(r4620154, MPFR_RNDN);
}

static mpfr_t r4620155, r4620156, r4620157, r4620158, r4620159, r4620160, r4620161, r4620162;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4620155, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4620156);
        mpfr_init(r4620157);
        mpfr_init(r4620158);
        mpfr_init_set_str(r4620159, "1", 10, MPFR_RNDN);
        mpfr_init(r4620160);
        mpfr_init(r4620161);
        mpfr_init(r4620162);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4620156, x, MPFR_RNDN);
        mpfr_sqr(r4620157, r4620156, MPFR_RNDN);
        mpfr_mul(r4620158, r4620155, r4620157, MPFR_RNDN);
        ;
        mpfr_add(r4620160, r4620159, r4620156, MPFR_RNDN);
        mpfr_add(r4620161, r4620158, r4620160, MPFR_RNDN);
        mpfr_neg(r4620162, r4620161, MPFR_RNDN);
        return mpfr_get_d(r4620162, MPFR_RNDN);
}

