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

char *name = "NMSE example 3.8";

double f_if(float n) {
        float r4775588 = n;
        float r4775589 = 1.0f;
        float r4775590 = r4775588 + r4775589;
        float r4775591 = log(r4775590);
        float r4775592 = r4775590 * r4775591;
        float r4775593 = log(r4775588);
        float r4775594 = r4775588 * r4775593;
        float r4775595 = r4775592 - r4775594;
        float r4775596 = r4775595 - r4775589;
        return r4775596;
}

double f_id(double n) {
        double r4775597 = n;
        double r4775598 = 1.0;
        double r4775599 = r4775597 + r4775598;
        double r4775600 = log(r4775599);
        double r4775601 = r4775599 * r4775600;
        double r4775602 = log(r4775597);
        double r4775603 = r4775597 * r4775602;
        double r4775604 = r4775601 - r4775603;
        double r4775605 = r4775604 - r4775598;
        return r4775605;
}


double f_of(float n) {
        float r4775606 = n;
        float r4775607 = 1.0f;
        float r4775608 = r4775606 + r4775607;
        float r4775609 = log(r4775608);
        float r4775610 = r4775609 * r4775608;
        float r4775611 = log(r4775606);
        float r4775612 = -r4775606;
        float r4775613 = r4775611 * r4775612;
        float r4775614 = r4775613 + r4775607;
        float r4775615 = r4775610 - r4775614;
        return r4775615;
}

double f_od(double n) {
        double r4775616 = n;
        double r4775617 = 1.0;
        double r4775618 = r4775616 + r4775617;
        double r4775619 = log(r4775618);
        double r4775620 = r4775619 * r4775618;
        double r4775621 = log(r4775616);
        double r4775622 = -r4775616;
        double r4775623 = r4775621 * r4775622;
        double r4775624 = r4775623 + r4775617;
        double r4775625 = r4775620 - r4775624;
        return r4775625;
}

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 r4775626, r4775627, r4775628, r4775629, r4775630, r4775631, r4775632, r4775633, r4775634;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4775626);
        mpfr_init_set_str(r4775627, "1", 10, MPFR_RNDN);
        mpfr_init(r4775628);
        mpfr_init(r4775629);
        mpfr_init(r4775630);
        mpfr_init(r4775631);
        mpfr_init(r4775632);
        mpfr_init(r4775633);
        mpfr_init(r4775634);
}

double f_im(double n) {
        mpfr_set_d(r4775626, n, MPFR_RNDN);
        ;
        mpfr_add(r4775628, r4775626, r4775627, MPFR_RNDN);
        mpfr_log(r4775629, r4775628, MPFR_RNDN);
        mpfr_mul(r4775630, r4775628, r4775629, MPFR_RNDN);
        mpfr_log(r4775631, r4775626, MPFR_RNDN);
        mpfr_mul(r4775632, r4775626, r4775631, MPFR_RNDN);
        mpfr_sub(r4775633, r4775630, r4775632, MPFR_RNDN);
        mpfr_sub(r4775634, r4775633, r4775627, MPFR_RNDN);
        return mpfr_get_d(r4775634, MPFR_RNDN);
}

static mpfr_t r4775635, r4775636, r4775637, r4775638, r4775639, r4775640, r4775641, r4775642, r4775643, r4775644;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4775635);
        mpfr_init_set_str(r4775636, "1", 10, MPFR_RNDN);
        mpfr_init(r4775637);
        mpfr_init(r4775638);
        mpfr_init(r4775639);
        mpfr_init(r4775640);
        mpfr_init(r4775641);
        mpfr_init(r4775642);
        mpfr_init(r4775643);
        mpfr_init(r4775644);
}

double f_fm(double n) {
        mpfr_set_d(r4775635, n, MPFR_RNDN);
        ;
        mpfr_add(r4775637, r4775635, r4775636, MPFR_RNDN);
        mpfr_log(r4775638, r4775637, MPFR_RNDN);
        mpfr_mul(r4775639, r4775638, r4775637, MPFR_RNDN);
        mpfr_log(r4775640, r4775635, MPFR_RNDN);
        mpfr_neg(r4775641, r4775635, MPFR_RNDN);
        mpfr_mul(r4775642, r4775640, r4775641, MPFR_RNDN);
        mpfr_add(r4775643, r4775642, r4775636, MPFR_RNDN);
        mpfr_sub(r4775644, r4775639, r4775643, MPFR_RNDN);
        return mpfr_get_d(r4775644, MPFR_RNDN);
}

static mpfr_t r4775645, r4775646, r4775647, r4775648, r4775649, r4775650, r4775651, r4775652, r4775653, r4775654;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4775645);
        mpfr_init_set_str(r4775646, "1", 10, MPFR_RNDN);
        mpfr_init(r4775647);
        mpfr_init(r4775648);
        mpfr_init(r4775649);
        mpfr_init(r4775650);
        mpfr_init(r4775651);
        mpfr_init(r4775652);
        mpfr_init(r4775653);
        mpfr_init(r4775654);
}

double f_dm(double n) {
        mpfr_set_d(r4775645, n, MPFR_RNDN);
        ;
        mpfr_add(r4775647, r4775645, r4775646, MPFR_RNDN);
        mpfr_log(r4775648, r4775647, MPFR_RNDN);
        mpfr_mul(r4775649, r4775648, r4775647, MPFR_RNDN);
        mpfr_log(r4775650, r4775645, MPFR_RNDN);
        mpfr_neg(r4775651, r4775645, MPFR_RNDN);
        mpfr_mul(r4775652, r4775650, r4775651, MPFR_RNDN);
        mpfr_add(r4775653, r4775652, r4775646, MPFR_RNDN);
        mpfr_sub(r4775654, r4775649, r4775653, MPFR_RNDN);
        return mpfr_get_d(r4775654, MPFR_RNDN);
}

