#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 r4618061 = x;
        float r4618062 = 1.0f;
        float r4618063 = r4618061 + r4618062;
        float r4618064 = 3.0f;
        float r4618065 = r4618062 / r4618064;
        float r4618066 = pow(r4618063, r4618065);
        float r4618067 = pow(r4618061, r4618065);
        float r4618068 = r4618066 - r4618067;
        return r4618068;
}

double f_id(double x) {
        double r4618069 = x;
        double r4618070 = 1.0;
        double r4618071 = r4618069 + r4618070;
        double r4618072 = 3.0;
        double r4618073 = r4618070 / r4618072;
        double r4618074 = pow(r4618071, r4618073);
        double r4618075 = pow(r4618069, r4618073);
        double r4618076 = r4618074 - r4618075;
        return r4618076;
}


double f_of(float x) {
        float r4618077 = 1.0f;
        float r4618078 = x;
        float r4618079 = r4618077 + r4618078;
        float r4618080 = 3.0f;
        float r4618081 = r4618077 / r4618080;
        float r4618082 = pow(r4618079, r4618081);
        float r4618083 = pow(r4618078, r4618081);
        float r4618084 = r4618083 + r4618082;
        float r4618085 = r4618082 * r4618084;
        float r4618086 = r4618083 * r4618083;
        float r4618087 = r4618085 + r4618086;
        float r4618088 = r4618077 / r4618087;
        return r4618088;
}

double f_od(double x) {
        double r4618089 = 1.0;
        double r4618090 = x;
        double r4618091 = r4618089 + r4618090;
        double r4618092 = 3.0;
        double r4618093 = r4618089 / r4618092;
        double r4618094 = pow(r4618091, r4618093);
        double r4618095 = pow(r4618090, r4618093);
        double r4618096 = r4618095 + r4618094;
        double r4618097 = r4618094 * r4618096;
        double r4618098 = r4618095 * r4618095;
        double r4618099 = r4618097 + r4618098;
        double r4618100 = r4618089 / r4618099;
        return r4618100;
}

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 r4618101, r4618102, r4618103, r4618104, r4618105, r4618106, r4618107, r4618108;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4618101);
        mpfr_init_set_str(r4618102, "1", 10, MPFR_RNDN);
        mpfr_init(r4618103);
        mpfr_init_set_str(r4618104, "3", 10, MPFR_RNDN);
        mpfr_init(r4618105);
        mpfr_init(r4618106);
        mpfr_init(r4618107);
        mpfr_init(r4618108);
}

double f_im(double x) {
        mpfr_set_d(r4618101, x, MPFR_RNDN);
        ;
        mpfr_add(r4618103, r4618101, r4618102, MPFR_RNDN);
        ;
        mpfr_div(r4618105, r4618102, r4618104, MPFR_RNDN);
        mpfr_pow(r4618106, r4618103, r4618105, MPFR_RNDN);
        mpfr_pow(r4618107, r4618101, r4618105, MPFR_RNDN);
        mpfr_sub(r4618108, r4618106, r4618107, MPFR_RNDN);
        return mpfr_get_d(r4618108, MPFR_RNDN);
}

static mpfr_t r4618109, r4618110, r4618111, r4618112, r4618113, r4618114, r4618115, r4618116, r4618117, r4618118, r4618119, r4618120;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4618109, "1", 10, MPFR_RNDN);
        mpfr_init(r4618110);
        mpfr_init(r4618111);
        mpfr_init_set_str(r4618112, "3", 10, MPFR_RNDN);
        mpfr_init(r4618113);
        mpfr_init(r4618114);
        mpfr_init(r4618115);
        mpfr_init(r4618116);
        mpfr_init(r4618117);
        mpfr_init(r4618118);
        mpfr_init(r4618119);
        mpfr_init(r4618120);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4618110, x, MPFR_RNDN);
        mpfr_add(r4618111, r4618109, r4618110, MPFR_RNDN);
        ;
        mpfr_div(r4618113, r4618109, r4618112, MPFR_RNDN);
        mpfr_pow(r4618114, r4618111, r4618113, MPFR_RNDN);
        mpfr_pow(r4618115, r4618110, r4618113, MPFR_RNDN);
        mpfr_add(r4618116, r4618115, r4618114, MPFR_RNDN);
        mpfr_mul(r4618117, r4618114, r4618116, MPFR_RNDN);
        mpfr_sqr(r4618118, r4618115, MPFR_RNDN);
        mpfr_add(r4618119, r4618117, r4618118, MPFR_RNDN);
        mpfr_div(r4618120, r4618109, r4618119, MPFR_RNDN);
        return mpfr_get_d(r4618120, MPFR_RNDN);
}

static mpfr_t r4618121, r4618122, r4618123, r4618124, r4618125, r4618126, r4618127, r4618128, r4618129, r4618130, r4618131, r4618132;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4618121, "1", 10, MPFR_RNDN);
        mpfr_init(r4618122);
        mpfr_init(r4618123);
        mpfr_init_set_str(r4618124, "3", 10, MPFR_RNDN);
        mpfr_init(r4618125);
        mpfr_init(r4618126);
        mpfr_init(r4618127);
        mpfr_init(r4618128);
        mpfr_init(r4618129);
        mpfr_init(r4618130);
        mpfr_init(r4618131);
        mpfr_init(r4618132);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4618122, x, MPFR_RNDN);
        mpfr_add(r4618123, r4618121, r4618122, MPFR_RNDN);
        ;
        mpfr_div(r4618125, r4618121, r4618124, MPFR_RNDN);
        mpfr_pow(r4618126, r4618123, r4618125, MPFR_RNDN);
        mpfr_pow(r4618127, r4618122, r4618125, MPFR_RNDN);
        mpfr_add(r4618128, r4618127, r4618126, MPFR_RNDN);
        mpfr_mul(r4618129, r4618126, r4618128, MPFR_RNDN);
        mpfr_sqr(r4618130, r4618127, MPFR_RNDN);
        mpfr_add(r4618131, r4618129, r4618130, MPFR_RNDN);
        mpfr_div(r4618132, r4618121, r4618131, MPFR_RNDN);
        return mpfr_get_d(r4618132, MPFR_RNDN);
}

