#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 r4619777 = n;
        float r4619778 = 1.0f;
        float r4619779 = r4619777 + r4619778;
        float r4619780 = log(r4619779);
        float r4619781 = r4619779 * r4619780;
        float r4619782 = log(r4619777);
        float r4619783 = r4619777 * r4619782;
        float r4619784 = r4619781 - r4619783;
        float r4619785 = r4619784 - r4619778;
        return r4619785;
}

double f_id(double n) {
        double r4619786 = n;
        double r4619787 = 1.0;
        double r4619788 = r4619786 + r4619787;
        double r4619789 = log(r4619788);
        double r4619790 = r4619788 * r4619789;
        double r4619791 = log(r4619786);
        double r4619792 = r4619786 * r4619791;
        double r4619793 = r4619790 - r4619792;
        double r4619794 = r4619793 - r4619787;
        return r4619794;
}


double f_of(float n) {
        float r4619795 = n;
        float r4619796 = 1.0f;
        float r4619797 = r4619795 + r4619796;
        float r4619798 = log(r4619797);
        float r4619799 = r4619798 * r4619797;
        float r4619800 = log(r4619795);
        float r4619801 = -r4619795;
        float r4619802 = r4619800 * r4619801;
        float r4619803 = r4619802 + r4619796;
        float r4619804 = r4619799 - r4619803;
        return r4619804;
}

double f_od(double n) {
        double r4619805 = n;
        double r4619806 = 1.0;
        double r4619807 = r4619805 + r4619806;
        double r4619808 = log(r4619807);
        double r4619809 = r4619808 * r4619807;
        double r4619810 = log(r4619805);
        double r4619811 = -r4619805;
        double r4619812 = r4619810 * r4619811;
        double r4619813 = r4619812 + r4619806;
        double r4619814 = r4619809 - r4619813;
        return r4619814;
}

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 r4619815, r4619816, r4619817, r4619818, r4619819, r4619820, r4619821, r4619822, r4619823;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4619815);
        mpfr_init_set_str(r4619816, "1", 10, MPFR_RNDN);
        mpfr_init(r4619817);
        mpfr_init(r4619818);
        mpfr_init(r4619819);
        mpfr_init(r4619820);
        mpfr_init(r4619821);
        mpfr_init(r4619822);
        mpfr_init(r4619823);
}

double f_im(double n) {
        mpfr_set_d(r4619815, n, MPFR_RNDN);
        ;
        mpfr_add(r4619817, r4619815, r4619816, MPFR_RNDN);
        mpfr_log(r4619818, r4619817, MPFR_RNDN);
        mpfr_mul(r4619819, r4619817, r4619818, MPFR_RNDN);
        mpfr_log(r4619820, r4619815, MPFR_RNDN);
        mpfr_mul(r4619821, r4619815, r4619820, MPFR_RNDN);
        mpfr_sub(r4619822, r4619819, r4619821, MPFR_RNDN);
        mpfr_sub(r4619823, r4619822, r4619816, MPFR_RNDN);
        return mpfr_get_d(r4619823, MPFR_RNDN);
}

static mpfr_t r4619824, r4619825, r4619826, r4619827, r4619828, r4619829, r4619830, r4619831, r4619832, r4619833;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4619824);
        mpfr_init_set_str(r4619825, "1", 10, MPFR_RNDN);
        mpfr_init(r4619826);
        mpfr_init(r4619827);
        mpfr_init(r4619828);
        mpfr_init(r4619829);
        mpfr_init(r4619830);
        mpfr_init(r4619831);
        mpfr_init(r4619832);
        mpfr_init(r4619833);
}

double f_fm(double n) {
        mpfr_set_d(r4619824, n, MPFR_RNDN);
        ;
        mpfr_add(r4619826, r4619824, r4619825, MPFR_RNDN);
        mpfr_log(r4619827, r4619826, MPFR_RNDN);
        mpfr_mul(r4619828, r4619827, r4619826, MPFR_RNDN);
        mpfr_log(r4619829, r4619824, MPFR_RNDN);
        mpfr_neg(r4619830, r4619824, MPFR_RNDN);
        mpfr_mul(r4619831, r4619829, r4619830, MPFR_RNDN);
        mpfr_add(r4619832, r4619831, r4619825, MPFR_RNDN);
        mpfr_sub(r4619833, r4619828, r4619832, MPFR_RNDN);
        return mpfr_get_d(r4619833, MPFR_RNDN);
}

static mpfr_t r4619834, r4619835, r4619836, r4619837, r4619838, r4619839, r4619840, r4619841, r4619842, r4619843;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4619834);
        mpfr_init_set_str(r4619835, "1", 10, MPFR_RNDN);
        mpfr_init(r4619836);
        mpfr_init(r4619837);
        mpfr_init(r4619838);
        mpfr_init(r4619839);
        mpfr_init(r4619840);
        mpfr_init(r4619841);
        mpfr_init(r4619842);
        mpfr_init(r4619843);
}

double f_dm(double n) {
        mpfr_set_d(r4619834, n, MPFR_RNDN);
        ;
        mpfr_add(r4619836, r4619834, r4619835, MPFR_RNDN);
        mpfr_log(r4619837, r4619836, MPFR_RNDN);
        mpfr_mul(r4619838, r4619837, r4619836, MPFR_RNDN);
        mpfr_log(r4619839, r4619834, MPFR_RNDN);
        mpfr_neg(r4619840, r4619834, MPFR_RNDN);
        mpfr_mul(r4619841, r4619839, r4619840, MPFR_RNDN);
        mpfr_add(r4619842, r4619841, r4619835, MPFR_RNDN);
        mpfr_sub(r4619843, r4619838, r4619842, MPFR_RNDN);
        return mpfr_get_d(r4619843, MPFR_RNDN);
}

