#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 r17590 = 1.0f;
        float r17591 = x;
        float r17592 = r17590 - r17591;
        float r17593 = log(r17592);
        float r17594 = r17590 + r17591;
        float r17595 = log(r17594);
        float r17596 = r17593 / r17595;
        return r17596;
}

double f_id(double x) {
        double r17597 = 1.0;
        double r17598 = x;
        double r17599 = r17597 - r17598;
        double r17600 = log(r17599);
        double r17601 = r17597 + r17598;
        double r17602 = log(r17601);
        double r17603 = r17600 / r17602;
        return r17603;
}


double f_of(float x) {
        float r17604 = 0.5f;
        float r17605 = x;
        float r17606 = r17605 * r17605;
        float r17607 = r17604 * r17606;
        float r17608 = 1.0f;
        float r17609 = r17608 + r17605;
        float r17610 = r17607 + r17609;
        float r17611 = -r17610;
        return r17611;
}

double f_od(double x) {
        double r17612 = 0.5;
        double r17613 = x;
        double r17614 = r17613 * r17613;
        double r17615 = r17612 * r17614;
        double r17616 = 1.0;
        double r17617 = r17616 + r17613;
        double r17618 = r17615 + r17617;
        double r17619 = -r17618;
        return r17619;
}

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 r17620, r17621, r17622, r17623, r17624, r17625, r17626;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r17620, "1", 10, MPFR_RNDN);
        mpfr_init(r17621);
        mpfr_init(r17622);
        mpfr_init(r17623);
        mpfr_init(r17624);
        mpfr_init(r17625);
        mpfr_init(r17626);
}

double f_im(double x) {
        ;
        mpfr_set_d(r17621, x, MPFR_RNDN);
        mpfr_sub(r17622, r17620, r17621, MPFR_RNDN);
        mpfr_log(r17623, r17622, MPFR_RNDN);
        mpfr_add(r17624, r17620, r17621, MPFR_RNDN);
        mpfr_log(r17625, r17624, MPFR_RNDN);
        mpfr_div(r17626, r17623, r17625, MPFR_RNDN);
        return mpfr_get_d(r17626, MPFR_RNDN);
}

static mpfr_t r17627, r17628, r17629, r17630, r17631, r17632, r17633, r17634;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r17627, "1/2", 10, MPFR_RNDN);
        mpfr_init(r17628);
        mpfr_init(r17629);
        mpfr_init(r17630);
        mpfr_init_set_str(r17631, "1", 10, MPFR_RNDN);
        mpfr_init(r17632);
        mpfr_init(r17633);
        mpfr_init(r17634);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r17628, x, MPFR_RNDN);
        mpfr_sqr(r17629, r17628, MPFR_RNDN);
        mpfr_mul(r17630, r17627, r17629, MPFR_RNDN);
        ;
        mpfr_add(r17632, r17631, r17628, MPFR_RNDN);
        mpfr_add(r17633, r17630, r17632, MPFR_RNDN);
        mpfr_neg(r17634, r17633, MPFR_RNDN);
        return mpfr_get_d(r17634, MPFR_RNDN);
}

static mpfr_t r17635, r17636, r17637, r17638, r17639, r17640, r17641, r17642;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r17635, "1/2", 10, MPFR_RNDN);
        mpfr_init(r17636);
        mpfr_init(r17637);
        mpfr_init(r17638);
        mpfr_init_set_str(r17639, "1", 10, MPFR_RNDN);
        mpfr_init(r17640);
        mpfr_init(r17641);
        mpfr_init(r17642);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r17636, x, MPFR_RNDN);
        mpfr_sqr(r17637, r17636, MPFR_RNDN);
        mpfr_mul(r17638, r17635, r17637, MPFR_RNDN);
        ;
        mpfr_add(r17640, r17639, r17636, MPFR_RNDN);
        mpfr_add(r17641, r17638, r17640, MPFR_RNDN);
        mpfr_neg(r17642, r17641, MPFR_RNDN);
        return mpfr_get_d(r17642, MPFR_RNDN);
}

