#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 r18022 = x;
        float r18023 = exp(r18022);
        float r18024 = 2.0f;
        float r18025 = r18023 - r18024;
        float r18026 = -r18022;
        float r18027 = exp(r18026);
        float r18028 = r18025 + r18027;
        return r18028;
}

double f_id(double x) {
        double r18029 = x;
        double r18030 = exp(r18029);
        double r18031 = 2.0;
        double r18032 = r18030 - r18031;
        double r18033 = -r18029;
        double r18034 = exp(r18033);
        double r18035 = r18032 + r18034;
        return r18035;
}


double f_of(float x) {
        float r18036 = 0.002777777777777778f;
        float r18037 = x;
        float r18038 = 6.0f;
        float r18039 = pow(r18037, r18038);
        float r18040 = r18036 * r18039;
        float r18041 = 0.08333333333333333f;
        float r18042 = 4.0f;
        float r18043 = pow(r18037, r18042);
        float r18044 = r18041 * r18043;
        float r18045 = r18040 + r18044;
        float r18046 = r18037 * r18037;
        float r18047 = r18045 + r18046;
        return r18047;
}

double f_od(double x) {
        double r18048 = 0.002777777777777778;
        double r18049 = x;
        double r18050 = 6.0;
        double r18051 = pow(r18049, r18050);
        double r18052 = r18048 * r18051;
        double r18053 = 0.08333333333333333;
        double r18054 = 4.0;
        double r18055 = pow(r18049, r18054);
        double r18056 = r18053 * r18055;
        double r18057 = r18052 + r18056;
        double r18058 = r18049 * r18049;
        double r18059 = r18057 + r18058;
        return r18059;
}

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 r18060, r18061, r18062, r18063, r18064, r18065, r18066;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r18060);
        mpfr_init(r18061);
        mpfr_init_set_str(r18062, "2", 10, MPFR_RNDN);
        mpfr_init(r18063);
        mpfr_init(r18064);
        mpfr_init(r18065);
        mpfr_init(r18066);
}

double f_im(double x) {
        mpfr_set_d(r18060, x, MPFR_RNDN);
        mpfr_exp(r18061, r18060, MPFR_RNDN);
        ;
        mpfr_sub(r18063, r18061, r18062, MPFR_RNDN);
        mpfr_neg(r18064, r18060, MPFR_RNDN);
        mpfr_exp(r18065, r18064, MPFR_RNDN);
        mpfr_add(r18066, r18063, r18065, MPFR_RNDN);
        return mpfr_get_d(r18066, MPFR_RNDN);
}

static mpfr_t r18067, r18068, r18069, r18070, r18071, r18072, r18073, r18074, r18075, r18076, r18077, r18078;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18067, "1/360", 10, MPFR_RNDN);
        mpfr_init(r18068);
        mpfr_init_set_str(r18069, "6", 10, MPFR_RNDN);
        mpfr_init(r18070);
        mpfr_init(r18071);
        mpfr_init_set_str(r18072, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r18073, "4", 10, MPFR_RNDN);
        mpfr_init(r18074);
        mpfr_init(r18075);
        mpfr_init(r18076);
        mpfr_init(r18077);
        mpfr_init(r18078);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r18068, x, MPFR_RNDN);
        ;
        mpfr_pow(r18070, r18068, r18069, MPFR_RNDN);
        mpfr_mul(r18071, r18067, r18070, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18074, r18068, r18073, MPFR_RNDN);
        mpfr_mul(r18075, r18072, r18074, MPFR_RNDN);
        mpfr_add(r18076, r18071, r18075, MPFR_RNDN);
        mpfr_sqr(r18077, r18068, MPFR_RNDN);
        mpfr_add(r18078, r18076, r18077, MPFR_RNDN);
        return mpfr_get_d(r18078, MPFR_RNDN);
}

static mpfr_t r18079, r18080, r18081, r18082, r18083, r18084, r18085, r18086, r18087, r18088, r18089, r18090;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18079, "1/360", 10, MPFR_RNDN);
        mpfr_init(r18080);
        mpfr_init_set_str(r18081, "6", 10, MPFR_RNDN);
        mpfr_init(r18082);
        mpfr_init(r18083);
        mpfr_init_set_str(r18084, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r18085, "4", 10, MPFR_RNDN);
        mpfr_init(r18086);
        mpfr_init(r18087);
        mpfr_init(r18088);
        mpfr_init(r18089);
        mpfr_init(r18090);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r18080, x, MPFR_RNDN);
        ;
        mpfr_pow(r18082, r18080, r18081, MPFR_RNDN);
        mpfr_mul(r18083, r18079, r18082, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18086, r18080, r18085, MPFR_RNDN);
        mpfr_mul(r18087, r18084, r18086, MPFR_RNDN);
        mpfr_add(r18088, r18083, r18087, MPFR_RNDN);
        mpfr_sqr(r18089, r18080, MPFR_RNDN);
        mpfr_add(r18090, r18088, r18089, MPFR_RNDN);
        return mpfr_get_d(r18090, MPFR_RNDN);
}

