#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 r28666 = N;
        float r28667 = 1;
        float r28668 = r28666 + r28667;
        float r28669 = log(r28668);
        float r28670 = r28668 * r28669;
        float r28671 = log(r28666);
        float r28672 = r28666 * r28671;
        float r28673 = r28670 - r28672;
        float r28674 = r28673 - r28667;
        return r28674;
}

double f_id(double N) {
        double r28675 = N;
        double r28676 = 1;
        double r28677 = r28675 + r28676;
        double r28678 = log(r28677);
        double r28679 = r28677 * r28678;
        double r28680 = log(r28675);
        double r28681 = r28675 * r28680;
        double r28682 = r28679 - r28681;
        double r28683 = r28682 - r28676;
        return r28683;
}


double f_of(float N) {
        float r28684 = N;
        float r28685 = 1;
        float r28686 = r28684 + r28685;
        float r28687 = 3;
        float r28688 = pow(r28684, r28687);
        float r28689 = r28685 + r28688;
        float r28690 = log(r28689);
        float r28691 = r28684 * r28684;
        float r28692 = r28685 - r28684;
        float r28693 = r28691 + r28692;
        float r28694 = log(r28693);
        float r28695 = r28690 - r28694;
        float r28696 = r28686 * r28695;
        float r28697 = cbrt(r28694);
        float r28698 = r28697 * r28697;
        float r28699 = cbrt(r28693);
        float r28700 = r28699 * r28699;
        float r28701 = log(r28700);
        float r28702 = log(r28699);
        float r28703 = r28701 + r28702;
        float r28704 = cbrt(r28703);
        float r28705 = r28698 * r28704;
        float r28706 = r28690 - r28705;
        float r28707 = r28686 * r28706;
        float r28708 = r28696 * r28707;
        float r28709 = log(r28684);
        float r28710 = r28684 * r28709;
        float r28711 = r28710 * r28710;
        float r28712 = r28708 - r28711;
        float r28713 = r28696 + r28710;
        float r28714 = r28712 / r28713;
        float r28715 = r28714 - r28685;
        return r28715;
}

double f_od(double N) {
        double r28716 = N;
        double r28717 = 1;
        double r28718 = r28716 + r28717;
        double r28719 = 3;
        double r28720 = pow(r28716, r28719);
        double r28721 = r28717 + r28720;
        double r28722 = log(r28721);
        double r28723 = r28716 * r28716;
        double r28724 = r28717 - r28716;
        double r28725 = r28723 + r28724;
        double r28726 = log(r28725);
        double r28727 = r28722 - r28726;
        double r28728 = r28718 * r28727;
        double r28729 = cbrt(r28726);
        double r28730 = r28729 * r28729;
        double r28731 = cbrt(r28725);
        double r28732 = r28731 * r28731;
        double r28733 = log(r28732);
        double r28734 = log(r28731);
        double r28735 = r28733 + r28734;
        double r28736 = cbrt(r28735);
        double r28737 = r28730 * r28736;
        double r28738 = r28722 - r28737;
        double r28739 = r28718 * r28738;
        double r28740 = r28728 * r28739;
        double r28741 = log(r28716);
        double r28742 = r28716 * r28741;
        double r28743 = r28742 * r28742;
        double r28744 = r28740 - r28743;
        double r28745 = r28728 + r28742;
        double r28746 = r28744 / r28745;
        double r28747 = r28746 - r28717;
        return r28747;
}

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 r28748, r28749, r28750, r28751, r28752, r28753, r28754, r28755, r28756;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28748);
        mpfr_init_set_str(r28749, "1", 10, MPFR_RNDN);
        mpfr_init(r28750);
        mpfr_init(r28751);
        mpfr_init(r28752);
        mpfr_init(r28753);
        mpfr_init(r28754);
        mpfr_init(r28755);
        mpfr_init(r28756);
}

double f_im(double N) {
        mpfr_set_d(r28748, N, MPFR_RNDN);
        ;
        mpfr_add(r28750, r28748, r28749, MPFR_RNDN);
        mpfr_log(r28751, r28750, MPFR_RNDN);
        mpfr_mul(r28752, r28750, r28751, MPFR_RNDN);
        mpfr_log(r28753, r28748, MPFR_RNDN);
        mpfr_mul(r28754, r28748, r28753, MPFR_RNDN);
        mpfr_sub(r28755, r28752, r28754, MPFR_RNDN);
        mpfr_sub(r28756, r28755, r28749, MPFR_RNDN);
        return mpfr_get_d(r28756, MPFR_RNDN);
}

static mpfr_t r28757, r28758, r28759, r28760, r28761, r28762, r28763, r28764, r28765, r28766, r28767, r28768, r28769, r28770, r28771, r28772, r28773, r28774, r28775, r28776, r28777, r28778, r28779, r28780, r28781, r28782, r28783, r28784, r28785, r28786, r28787, r28788;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28757);
        mpfr_init_set_str(r28758, "1", 10, MPFR_RNDN);
        mpfr_init(r28759);
        mpfr_init_set_str(r28760, "3", 10, MPFR_RNDN);
        mpfr_init(r28761);
        mpfr_init(r28762);
        mpfr_init(r28763);
        mpfr_init(r28764);
        mpfr_init(r28765);
        mpfr_init(r28766);
        mpfr_init(r28767);
        mpfr_init(r28768);
        mpfr_init(r28769);
        mpfr_init(r28770);
        mpfr_init(r28771);
        mpfr_init(r28772);
        mpfr_init(r28773);
        mpfr_init(r28774);
        mpfr_init(r28775);
        mpfr_init(r28776);
        mpfr_init(r28777);
        mpfr_init(r28778);
        mpfr_init(r28779);
        mpfr_init(r28780);
        mpfr_init(r28781);
        mpfr_init(r28782);
        mpfr_init(r28783);
        mpfr_init(r28784);
        mpfr_init(r28785);
        mpfr_init(r28786);
        mpfr_init(r28787);
        mpfr_init(r28788);
}

double f_fm(double N) {
        mpfr_set_d(r28757, N, MPFR_RNDN);
        ;
        mpfr_add(r28759, r28757, r28758, MPFR_RNDN);
        ;
        mpfr_pow(r28761, r28757, r28760, MPFR_RNDN);
        mpfr_add(r28762, r28758, r28761, MPFR_RNDN);
        mpfr_log(r28763, r28762, MPFR_RNDN);
        mpfr_mul(r28764, r28757, r28757, MPFR_RNDN);
        mpfr_sub(r28765, r28758, r28757, MPFR_RNDN);
        mpfr_add(r28766, r28764, r28765, MPFR_RNDN);
        mpfr_log(r28767, r28766, MPFR_RNDN);
        mpfr_sub(r28768, r28763, r28767, MPFR_RNDN);
        mpfr_mul(r28769, r28759, r28768, MPFR_RNDN);
        mpfr_cbrt(r28770, r28767, MPFR_RNDN);
        mpfr_mul(r28771, r28770, r28770, MPFR_RNDN);
        mpfr_cbrt(r28772, r28766, MPFR_RNDN);
        mpfr_mul(r28773, r28772, r28772, MPFR_RNDN);
        mpfr_log(r28774, r28773, MPFR_RNDN);
        mpfr_log(r28775, r28772, MPFR_RNDN);
        mpfr_add(r28776, r28774, r28775, MPFR_RNDN);
        mpfr_cbrt(r28777, r28776, MPFR_RNDN);
        mpfr_mul(r28778, r28771, r28777, MPFR_RNDN);
        mpfr_sub(r28779, r28763, r28778, MPFR_RNDN);
        mpfr_mul(r28780, r28759, r28779, MPFR_RNDN);
        mpfr_mul(r28781, r28769, r28780, MPFR_RNDN);
        mpfr_log(r28782, r28757, MPFR_RNDN);
        mpfr_mul(r28783, r28757, r28782, MPFR_RNDN);
        mpfr_mul(r28784, r28783, r28783, MPFR_RNDN);
        mpfr_sub(r28785, r28781, r28784, MPFR_RNDN);
        mpfr_add(r28786, r28769, r28783, MPFR_RNDN);
        mpfr_div(r28787, r28785, r28786, MPFR_RNDN);
        mpfr_sub(r28788, r28787, r28758, MPFR_RNDN);
        return mpfr_get_d(r28788, MPFR_RNDN);
}

static mpfr_t r28789, r28790, r28791, r28792, r28793, r28794, r28795, r28796, r28797, r28798, r28799, r28800, r28801, r28802, r28803, r28804, r28805, r28806, r28807, r28808, r28809, r28810, r28811, r28812, r28813, r28814, r28815, r28816, r28817, r28818, r28819, r28820;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28789);
        mpfr_init_set_str(r28790, "1", 10, MPFR_RNDN);
        mpfr_init(r28791);
        mpfr_init_set_str(r28792, "3", 10, MPFR_RNDN);
        mpfr_init(r28793);
        mpfr_init(r28794);
        mpfr_init(r28795);
        mpfr_init(r28796);
        mpfr_init(r28797);
        mpfr_init(r28798);
        mpfr_init(r28799);
        mpfr_init(r28800);
        mpfr_init(r28801);
        mpfr_init(r28802);
        mpfr_init(r28803);
        mpfr_init(r28804);
        mpfr_init(r28805);
        mpfr_init(r28806);
        mpfr_init(r28807);
        mpfr_init(r28808);
        mpfr_init(r28809);
        mpfr_init(r28810);
        mpfr_init(r28811);
        mpfr_init(r28812);
        mpfr_init(r28813);
        mpfr_init(r28814);
        mpfr_init(r28815);
        mpfr_init(r28816);
        mpfr_init(r28817);
        mpfr_init(r28818);
        mpfr_init(r28819);
        mpfr_init(r28820);
}

double f_dm(double N) {
        mpfr_set_d(r28789, N, MPFR_RNDN);
        ;
        mpfr_add(r28791, r28789, r28790, MPFR_RNDN);
        ;
        mpfr_pow(r28793, r28789, r28792, MPFR_RNDN);
        mpfr_add(r28794, r28790, r28793, MPFR_RNDN);
        mpfr_log(r28795, r28794, MPFR_RNDN);
        mpfr_mul(r28796, r28789, r28789, MPFR_RNDN);
        mpfr_sub(r28797, r28790, r28789, MPFR_RNDN);
        mpfr_add(r28798, r28796, r28797, MPFR_RNDN);
        mpfr_log(r28799, r28798, MPFR_RNDN);
        mpfr_sub(r28800, r28795, r28799, MPFR_RNDN);
        mpfr_mul(r28801, r28791, r28800, MPFR_RNDN);
        mpfr_cbrt(r28802, r28799, MPFR_RNDN);
        mpfr_mul(r28803, r28802, r28802, MPFR_RNDN);
        mpfr_cbrt(r28804, r28798, MPFR_RNDN);
        mpfr_mul(r28805, r28804, r28804, MPFR_RNDN);
        mpfr_log(r28806, r28805, MPFR_RNDN);
        mpfr_log(r28807, r28804, MPFR_RNDN);
        mpfr_add(r28808, r28806, r28807, MPFR_RNDN);
        mpfr_cbrt(r28809, r28808, MPFR_RNDN);
        mpfr_mul(r28810, r28803, r28809, MPFR_RNDN);
        mpfr_sub(r28811, r28795, r28810, MPFR_RNDN);
        mpfr_mul(r28812, r28791, r28811, MPFR_RNDN);
        mpfr_mul(r28813, r28801, r28812, MPFR_RNDN);
        mpfr_log(r28814, r28789, MPFR_RNDN);
        mpfr_mul(r28815, r28789, r28814, MPFR_RNDN);
        mpfr_mul(r28816, r28815, r28815, MPFR_RNDN);
        mpfr_sub(r28817, r28813, r28816, MPFR_RNDN);
        mpfr_add(r28818, r28801, r28815, MPFR_RNDN);
        mpfr_div(r28819, r28817, r28818, MPFR_RNDN);
        mpfr_sub(r28820, r28819, r28790, MPFR_RNDN);
        return mpfr_get_d(r28820, MPFR_RNDN);
}

