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

char *name = "NMSE example 3.7";

double f_if(float x) {
        float r5354776 = x;
        float r5354777 = exp(r5354776);
        float r5354778 = 1.0f;
        float r5354779 = r5354777 - r5354778;
        return r5354779;
}

double f_id(double x) {
        double r5354780 = x;
        double r5354781 = exp(r5354780);
        double r5354782 = 1.0;
        double r5354783 = r5354781 - r5354782;
        return r5354783;
}


double f_of(float x) {
        float r5354784 = x;
        float r5354785 = exp(r5354784);
        float r5354786 = sqrt(r5354785);
        float r5354787 = 1.0f;
        float r5354788 = r5354786 + r5354787;
        float r5354789 = 0.125f;
        float r5354790 = r5354784 * r5354784;
        float r5354791 = r5354789 * r5354790;
        float r5354792 = 0.5f;
        float r5354793 = r5354792 * r5354784;
        float r5354794 = 0.020833333333333332f;
        float r5354795 = 3.0f;
        float r5354796 = pow(r5354784, r5354795);
        float r5354797 = r5354794 * r5354796;
        float r5354798 = r5354793 + r5354797;
        float r5354799 = r5354791 + r5354798;
        float r5354800 = r5354788 * r5354799;
        return r5354800;
}

double f_od(double x) {
        double r5354801 = x;
        double r5354802 = exp(r5354801);
        double r5354803 = sqrt(r5354802);
        double r5354804 = 1.0;
        double r5354805 = r5354803 + r5354804;
        double r5354806 = 0.125;
        double r5354807 = r5354801 * r5354801;
        double r5354808 = r5354806 * r5354807;
        double r5354809 = 0.5;
        double r5354810 = r5354809 * r5354801;
        double r5354811 = 0.020833333333333332;
        double r5354812 = 3.0;
        double r5354813 = pow(r5354801, r5354812);
        double r5354814 = r5354811 * r5354813;
        double r5354815 = r5354810 + r5354814;
        double r5354816 = r5354808 + r5354815;
        double r5354817 = r5354805 * r5354816;
        return r5354817;
}

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 r5354818, r5354819, r5354820, r5354821;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5354818);
        mpfr_init(r5354819);
        mpfr_init_set_str(r5354820, "1", 10, MPFR_RNDN);
        mpfr_init(r5354821);
}

double f_im(double x) {
        mpfr_set_d(r5354818, x, MPFR_RNDN);
        mpfr_exp(r5354819, r5354818, MPFR_RNDN);
        ;
        mpfr_sub(r5354821, r5354819, r5354820, MPFR_RNDN);
        return mpfr_get_d(r5354821, MPFR_RNDN);
}

static mpfr_t r5354822, r5354823, r5354824, r5354825, r5354826, r5354827, r5354828, r5354829, r5354830, r5354831, r5354832, r5354833, r5354834, r5354835, r5354836, r5354837, r5354838;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5354822);
        mpfr_init(r5354823);
        mpfr_init(r5354824);
        mpfr_init_set_str(r5354825, "1", 10, MPFR_RNDN);
        mpfr_init(r5354826);
        mpfr_init_set_str(r5354827, "1/8", 10, MPFR_RNDN);
        mpfr_init(r5354828);
        mpfr_init(r5354829);
        mpfr_init_set_str(r5354830, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5354831);
        mpfr_init_set_str(r5354832, "1/48", 10, MPFR_RNDN);
        mpfr_init_set_str(r5354833, "3", 10, MPFR_RNDN);
        mpfr_init(r5354834);
        mpfr_init(r5354835);
        mpfr_init(r5354836);
        mpfr_init(r5354837);
        mpfr_init(r5354838);
}

double f_fm(double x) {
        mpfr_set_d(r5354822, x, MPFR_RNDN);
        mpfr_exp(r5354823, r5354822, MPFR_RNDN);
        mpfr_sqrt(r5354824, r5354823, MPFR_RNDN);
        ;
        mpfr_add(r5354826, r5354824, r5354825, MPFR_RNDN);
        ;
        mpfr_sqr(r5354828, r5354822, MPFR_RNDN);
        mpfr_mul(r5354829, r5354827, r5354828, MPFR_RNDN);
        ;
        mpfr_mul(r5354831, r5354830, r5354822, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r5354834, r5354822, r5354833, MPFR_RNDN);
        mpfr_mul(r5354835, r5354832, r5354834, MPFR_RNDN);
        mpfr_add(r5354836, r5354831, r5354835, MPFR_RNDN);
        mpfr_add(r5354837, r5354829, r5354836, MPFR_RNDN);
        mpfr_mul(r5354838, r5354826, r5354837, MPFR_RNDN);
        return mpfr_get_d(r5354838, MPFR_RNDN);
}

static mpfr_t r5354839, r5354840, r5354841, r5354842, r5354843, r5354844, r5354845, r5354846, r5354847, r5354848, r5354849, r5354850, r5354851, r5354852, r5354853, r5354854, r5354855;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5354839);
        mpfr_init(r5354840);
        mpfr_init(r5354841);
        mpfr_init_set_str(r5354842, "1", 10, MPFR_RNDN);
        mpfr_init(r5354843);
        mpfr_init_set_str(r5354844, "1/8", 10, MPFR_RNDN);
        mpfr_init(r5354845);
        mpfr_init(r5354846);
        mpfr_init_set_str(r5354847, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5354848);
        mpfr_init_set_str(r5354849, "1/48", 10, MPFR_RNDN);
        mpfr_init_set_str(r5354850, "3", 10, MPFR_RNDN);
        mpfr_init(r5354851);
        mpfr_init(r5354852);
        mpfr_init(r5354853);
        mpfr_init(r5354854);
        mpfr_init(r5354855);
}

double f_dm(double x) {
        mpfr_set_d(r5354839, x, MPFR_RNDN);
        mpfr_exp(r5354840, r5354839, MPFR_RNDN);
        mpfr_sqrt(r5354841, r5354840, MPFR_RNDN);
        ;
        mpfr_add(r5354843, r5354841, r5354842, MPFR_RNDN);
        ;
        mpfr_sqr(r5354845, r5354839, MPFR_RNDN);
        mpfr_mul(r5354846, r5354844, r5354845, MPFR_RNDN);
        ;
        mpfr_mul(r5354848, r5354847, r5354839, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r5354851, r5354839, r5354850, MPFR_RNDN);
        mpfr_mul(r5354852, r5354849, r5354851, MPFR_RNDN);
        mpfr_add(r5354853, r5354848, r5354852, MPFR_RNDN);
        mpfr_add(r5354854, r5354846, r5354853, MPFR_RNDN);
        mpfr_mul(r5354855, r5354843, r5354854, MPFR_RNDN);
        return mpfr_get_d(r5354855, MPFR_RNDN);
}

