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

char *name = "NMSE problem 3.3.7";

double f_if(float x) {
        float r4774777 = x;
        float r4774778 = exp(r4774777);
        float r4774779 = 2.0f;
        float r4774780 = r4774778 - r4774779;
        float r4774781 = -r4774777;
        float r4774782 = exp(r4774781);
        float r4774783 = r4774780 + r4774782;
        return r4774783;
}

double f_id(double x) {
        double r4774784 = x;
        double r4774785 = exp(r4774784);
        double r4774786 = 2.0;
        double r4774787 = r4774785 - r4774786;
        double r4774788 = -r4774784;
        double r4774789 = exp(r4774788);
        double r4774790 = r4774787 + r4774789;
        return r4774790;
}


double f_of(float x) {
        float r4774791 = x;
        float r4774792 = r4774791 * r4774791;
        float r4774793 = 0.08333333333333333f;
        float r4774794 = 4.0f;
        float r4774795 = pow(r4774791, r4774794);
        float r4774796 = r4774793 * r4774795;
        float r4774797 = 0.002777777777777778f;
        float r4774798 = 6.0f;
        float r4774799 = pow(r4774791, r4774798);
        float r4774800 = r4774797 * r4774799;
        float r4774801 = r4774796 + r4774800;
        float r4774802 = r4774792 + r4774801;
        return r4774802;
}

double f_od(double x) {
        double r4774803 = x;
        double r4774804 = r4774803 * r4774803;
        double r4774805 = 0.08333333333333333;
        double r4774806 = 4.0;
        double r4774807 = pow(r4774803, r4774806);
        double r4774808 = r4774805 * r4774807;
        double r4774809 = 0.002777777777777778;
        double r4774810 = 6.0;
        double r4774811 = pow(r4774803, r4774810);
        double r4774812 = r4774809 * r4774811;
        double r4774813 = r4774808 + r4774812;
        double r4774814 = r4774804 + r4774813;
        return r4774814;
}

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 r4774815, r4774816, r4774817, r4774818, r4774819, r4774820, r4774821;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774815);
        mpfr_init(r4774816);
        mpfr_init_set_str(r4774817, "2", 10, MPFR_RNDN);
        mpfr_init(r4774818);
        mpfr_init(r4774819);
        mpfr_init(r4774820);
        mpfr_init(r4774821);
}

double f_im(double x) {
        mpfr_set_d(r4774815, x, MPFR_RNDN);
        mpfr_exp(r4774816, r4774815, MPFR_RNDN);
        ;
        mpfr_sub(r4774818, r4774816, r4774817, MPFR_RNDN);
        mpfr_neg(r4774819, r4774815, MPFR_RNDN);
        mpfr_exp(r4774820, r4774819, MPFR_RNDN);
        mpfr_add(r4774821, r4774818, r4774820, MPFR_RNDN);
        return mpfr_get_d(r4774821, MPFR_RNDN);
}

static mpfr_t r4774822, r4774823, r4774824, r4774825, r4774826, r4774827, r4774828, r4774829, r4774830, r4774831, r4774832, r4774833;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774822);
        mpfr_init(r4774823);
        mpfr_init_set_str(r4774824, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r4774825, "4", 10, MPFR_RNDN);
        mpfr_init(r4774826);
        mpfr_init(r4774827);
        mpfr_init_set_str(r4774828, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r4774829, "6", 10, MPFR_RNDN);
        mpfr_init(r4774830);
        mpfr_init(r4774831);
        mpfr_init(r4774832);
        mpfr_init(r4774833);
}

double f_fm(double x) {
        mpfr_set_d(r4774822, x, MPFR_RNDN);
        mpfr_sqr(r4774823, r4774822, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4774826, r4774822, r4774825, MPFR_RNDN);
        mpfr_mul(r4774827, r4774824, r4774826, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4774830, r4774822, r4774829, MPFR_RNDN);
        mpfr_mul(r4774831, r4774828, r4774830, MPFR_RNDN);
        mpfr_add(r4774832, r4774827, r4774831, MPFR_RNDN);
        mpfr_add(r4774833, r4774823, r4774832, MPFR_RNDN);
        return mpfr_get_d(r4774833, MPFR_RNDN);
}

static mpfr_t r4774834, r4774835, r4774836, r4774837, r4774838, r4774839, r4774840, r4774841, r4774842, r4774843, r4774844, r4774845;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4774834);
        mpfr_init(r4774835);
        mpfr_init_set_str(r4774836, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r4774837, "4", 10, MPFR_RNDN);
        mpfr_init(r4774838);
        mpfr_init(r4774839);
        mpfr_init_set_str(r4774840, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r4774841, "6", 10, MPFR_RNDN);
        mpfr_init(r4774842);
        mpfr_init(r4774843);
        mpfr_init(r4774844);
        mpfr_init(r4774845);
}

double f_dm(double x) {
        mpfr_set_d(r4774834, x, MPFR_RNDN);
        mpfr_sqr(r4774835, r4774834, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4774838, r4774834, r4774837, MPFR_RNDN);
        mpfr_mul(r4774839, r4774836, r4774838, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4774842, r4774834, r4774841, MPFR_RNDN);
        mpfr_mul(r4774843, r4774840, r4774842, MPFR_RNDN);
        mpfr_add(r4774844, r4774839, r4774843, MPFR_RNDN);
        mpfr_add(r4774845, r4774835, r4774844, MPFR_RNDN);
        return mpfr_get_d(r4774845, MPFR_RNDN);
}

