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

char *name = "NMSE problem 3.3.4";

double f_if(float x) {
        float r5353073 = x;
        float r5353074 = 1.0f;
        float r5353075 = r5353073 + r5353074;
        float r5353076 = 3.0f;
        float r5353077 = r5353074 / r5353076;
        float r5353078 = pow(r5353075, r5353077);
        float r5353079 = pow(r5353073, r5353077);
        float r5353080 = r5353078 - r5353079;
        return r5353080;
}

double f_id(double x) {
        double r5353081 = x;
        double r5353082 = 1.0;
        double r5353083 = r5353081 + r5353082;
        double r5353084 = 3.0;
        double r5353085 = r5353082 / r5353084;
        double r5353086 = pow(r5353083, r5353085);
        double r5353087 = pow(r5353081, r5353085);
        double r5353088 = r5353086 - r5353087;
        return r5353088;
}


double f_of(float x) {
        float r5353089 = x;
        float r5353090 = 1.0f;
        float r5353091 = r5353089 + r5353090;
        float r5353092 = log(r5353091);
        float r5353093 = 3.0f;
        float r5353094 = r5353092 / r5353093;
        float r5353095 = exp(r5353094);
        float r5353096 = r5353090 / r5353093;
        float r5353097 = pow(r5353089, r5353096);
        float r5353098 = r5353095 - r5353097;
        float r5353099 = log(r5353098);
        float r5353100 = cbrt(r5353099);
        float r5353101 = r5353100 * (r5353100 * r5353100);
        float r5353102 = exp(r5353101);
        return r5353102;
}

double f_od(double x) {
        double r5353103 = x;
        double r5353104 = 1.0;
        double r5353105 = r5353103 + r5353104;
        double r5353106 = log(r5353105);
        double r5353107 = 3.0;
        double r5353108 = r5353106 / r5353107;
        double r5353109 = exp(r5353108);
        double r5353110 = r5353104 / r5353107;
        double r5353111 = pow(r5353103, r5353110);
        double r5353112 = r5353109 - r5353111;
        double r5353113 = log(r5353112);
        double r5353114 = cbrt(r5353113);
        double r5353115 = r5353114 * (r5353114 * r5353114);
        double r5353116 = exp(r5353115);
        return r5353116;
}

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 r5353117, r5353118, r5353119, r5353120, r5353121, r5353122, r5353123, r5353124;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353117);
        mpfr_init_set_str(r5353118, "1", 10, MPFR_RNDN);
        mpfr_init(r5353119);
        mpfr_init_set_str(r5353120, "3", 10, MPFR_RNDN);
        mpfr_init(r5353121);
        mpfr_init(r5353122);
        mpfr_init(r5353123);
        mpfr_init(r5353124);
}

double f_im(double x) {
        mpfr_set_d(r5353117, x, MPFR_RNDN);
        ;
        mpfr_add(r5353119, r5353117, r5353118, MPFR_RNDN);
        ;
        mpfr_div(r5353121, r5353118, r5353120, MPFR_RNDN);
        mpfr_pow(r5353122, r5353119, r5353121, MPFR_RNDN);
        mpfr_pow(r5353123, r5353117, r5353121, MPFR_RNDN);
        mpfr_sub(r5353124, r5353122, r5353123, MPFR_RNDN);
        return mpfr_get_d(r5353124, MPFR_RNDN);
}

static mpfr_t r5353125, r5353126, r5353127, r5353128, r5353129, r5353130, r5353131, r5353132, r5353133, r5353134, r5353135, r5353136, r5353137, r5353138;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353125);
        mpfr_init_set_str(r5353126, "1", 10, MPFR_RNDN);
        mpfr_init(r5353127);
        mpfr_init(r5353128);
        mpfr_init_set_str(r5353129, "3", 10, MPFR_RNDN);
        mpfr_init(r5353130);
        mpfr_init(r5353131);
        mpfr_init(r5353132);
        mpfr_init(r5353133);
        mpfr_init(r5353134);
        mpfr_init(r5353135);
        mpfr_init(r5353136);
        mpfr_init(r5353137);
        mpfr_init(r5353138);
}

double f_fm(double x) {
        mpfr_set_d(r5353125, x, MPFR_RNDN);
        ;
        mpfr_add(r5353127, r5353125, r5353126, MPFR_RNDN);
        mpfr_log(r5353128, r5353127, MPFR_RNDN);
        ;
        mpfr_div(r5353130, r5353128, r5353129, MPFR_RNDN);
        mpfr_exp(r5353131, r5353130, MPFR_RNDN);
        mpfr_div(r5353132, r5353126, r5353129, MPFR_RNDN);
        mpfr_pow(r5353133, r5353125, r5353132, MPFR_RNDN);
        mpfr_sub(r5353134, r5353131, r5353133, MPFR_RNDN);
        mpfr_log(r5353135, r5353134, MPFR_RNDN);
        mpfr_cbrt(r5353136, r5353135, MPFR_RNDN);
        mpfr_mul(r5353137, r5353136, r5353136, MPFR_RNDN); mpfr_mul(r5353137, r5353137, r5353136, MPFR_RNDN);
        mpfr_exp(r5353138, r5353137, MPFR_RNDN);
        return mpfr_get_d(r5353138, MPFR_RNDN);
}

static mpfr_t r5353139, r5353140, r5353141, r5353142, r5353143, r5353144, r5353145, r5353146, r5353147, r5353148, r5353149, r5353150, r5353151, r5353152;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353139);
        mpfr_init_set_str(r5353140, "1", 10, MPFR_RNDN);
        mpfr_init(r5353141);
        mpfr_init(r5353142);
        mpfr_init_set_str(r5353143, "3", 10, MPFR_RNDN);
        mpfr_init(r5353144);
        mpfr_init(r5353145);
        mpfr_init(r5353146);
        mpfr_init(r5353147);
        mpfr_init(r5353148);
        mpfr_init(r5353149);
        mpfr_init(r5353150);
        mpfr_init(r5353151);
        mpfr_init(r5353152);
}

double f_dm(double x) {
        mpfr_set_d(r5353139, x, MPFR_RNDN);
        ;
        mpfr_add(r5353141, r5353139, r5353140, MPFR_RNDN);
        mpfr_log(r5353142, r5353141, MPFR_RNDN);
        ;
        mpfr_div(r5353144, r5353142, r5353143, MPFR_RNDN);
        mpfr_exp(r5353145, r5353144, MPFR_RNDN);
        mpfr_div(r5353146, r5353140, r5353143, MPFR_RNDN);
        mpfr_pow(r5353147, r5353139, r5353146, MPFR_RNDN);
        mpfr_sub(r5353148, r5353145, r5353147, MPFR_RNDN);
        mpfr_log(r5353149, r5353148, MPFR_RNDN);
        mpfr_cbrt(r5353150, r5353149, MPFR_RNDN);
        mpfr_mul(r5353151, r5353150, r5353150, MPFR_RNDN); mpfr_mul(r5353151, r5353151, r5353150, MPFR_RNDN);
        mpfr_exp(r5353152, r5353151, MPFR_RNDN);
        return mpfr_get_d(r5353152, MPFR_RNDN);
}

