#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 r27053 = x;
        float r27054 = exp(r27053);
        float r27055 = 2;
        float r27056 = r27054 - r27055;
        float r27057 = -r27053;
        float r27058 = exp(r27057);
        float r27059 = r27056 + r27058;
        return r27059;
}

double f_id(double x) {
        double r27060 = x;
        double r27061 = exp(r27060);
        double r27062 = 2;
        double r27063 = r27061 - r27062;
        double r27064 = -r27060;
        double r27065 = exp(r27064);
        double r27066 = r27063 + r27065;
        return r27066;
}


double f_of(float x) {
        float r27067 = x;
        float r27068 = 2;
        float r27069 = pow(r27067, r27068);
        float r27070 = 1/12;
        float r27071 = 4;
        float r27072 = pow(r27067, r27071);
        float r27073 = r27070 * r27072;
        float r27074 = 1/360;
        float r27075 = 6;
        float r27076 = pow(r27067, r27075);
        float r27077 = r27074 * r27076;
        float r27078 = r27073 + r27077;
        float r27079 = r27069 + r27078;
        return r27079;
}

double f_od(double x) {
        double r27080 = x;
        double r27081 = 2;
        double r27082 = pow(r27080, r27081);
        double r27083 = 1/12;
        double r27084 = 4;
        double r27085 = pow(r27080, r27084);
        double r27086 = r27083 * r27085;
        double r27087 = 1/360;
        double r27088 = 6;
        double r27089 = pow(r27080, r27088);
        double r27090 = r27087 * r27089;
        double r27091 = r27086 + r27090;
        double r27092 = r27082 + r27091;
        return r27092;
}

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 r27093, r27094, r27095, r27096, r27097, r27098, r27099;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r27093);
        mpfr_init(r27094);
        mpfr_init_set_str(r27095, "2", 10, MPFR_RNDN);
        mpfr_init(r27096);
        mpfr_init(r27097);
        mpfr_init(r27098);
        mpfr_init(r27099);
}

double f_im(double x) {
        mpfr_set_d(r27093, x, MPFR_RNDN);
        mpfr_exp(r27094, r27093, MPFR_RNDN);
        ;
        mpfr_sub(r27096, r27094, r27095, MPFR_RNDN);
        mpfr_neg(r27097, r27093, MPFR_RNDN);
        mpfr_exp(r27098, r27097, MPFR_RNDN);
        mpfr_add(r27099, r27096, r27098, MPFR_RNDN);
        return mpfr_get_d(r27099, MPFR_RNDN);
}

static mpfr_t r27100, r27101, r27102, r27103, r27104, r27105, r27106, r27107, r27108, r27109, r27110, r27111, r27112;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r27100);
        mpfr_init_set_str(r27101, "2", 10, MPFR_RNDN);
        mpfr_init(r27102);
        mpfr_init_set_str(r27103, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r27104, "4", 10, MPFR_RNDN);
        mpfr_init(r27105);
        mpfr_init(r27106);
        mpfr_init_set_str(r27107, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r27108, "6", 10, MPFR_RNDN);
        mpfr_init(r27109);
        mpfr_init(r27110);
        mpfr_init(r27111);
        mpfr_init(r27112);
}

double f_fm(double x) {
        mpfr_set_d(r27100, x, MPFR_RNDN);
        ;
        mpfr_pow(r27102, r27100, r27101, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27105, r27100, r27104, MPFR_RNDN);
        mpfr_mul(r27106, r27103, r27105, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27109, r27100, r27108, MPFR_RNDN);
        mpfr_mul(r27110, r27107, r27109, MPFR_RNDN);
        mpfr_add(r27111, r27106, r27110, MPFR_RNDN);
        mpfr_add(r27112, r27102, r27111, MPFR_RNDN);
        return mpfr_get_d(r27112, MPFR_RNDN);
}

static mpfr_t r27113, r27114, r27115, r27116, r27117, r27118, r27119, r27120, r27121, r27122, r27123, r27124, r27125;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r27113);
        mpfr_init_set_str(r27114, "2", 10, MPFR_RNDN);
        mpfr_init(r27115);
        mpfr_init_set_str(r27116, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r27117, "4", 10, MPFR_RNDN);
        mpfr_init(r27118);
        mpfr_init(r27119);
        mpfr_init_set_str(r27120, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r27121, "6", 10, MPFR_RNDN);
        mpfr_init(r27122);
        mpfr_init(r27123);
        mpfr_init(r27124);
        mpfr_init(r27125);
}

double f_dm(double x) {
        mpfr_set_d(r27113, x, MPFR_RNDN);
        ;
        mpfr_pow(r27115, r27113, r27114, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27118, r27113, r27117, MPFR_RNDN);
        mpfr_mul(r27119, r27116, r27118, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27122, r27113, r27121, MPFR_RNDN);
        mpfr_mul(r27123, r27120, r27122, MPFR_RNDN);
        mpfr_add(r27124, r27119, r27123, MPFR_RNDN);
        mpfr_add(r27125, r27115, r27124, MPFR_RNDN);
        return mpfr_get_d(r27125, MPFR_RNDN);
}

