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

char *name = "NMSE problem 3.4.6";

double f_if(float x, float n) {
        float r5318120 = x;
        float r5318121 = 1.0f;
        float r5318122 = r5318120 + r5318121;
        float r5318123 = n;
        float r5318124 = r5318121 / r5318123;
        float r5318125 = pow(r5318122, r5318124);
        float r5318126 = pow(r5318120, r5318124);
        float r5318127 = r5318125 - r5318126;
        return r5318127;
}

double f_id(double x, double n) {
        double r5318128 = x;
        double r5318129 = 1.0;
        double r5318130 = r5318128 + r5318129;
        double r5318131 = n;
        double r5318132 = r5318129 / r5318131;
        double r5318133 = pow(r5318130, r5318132);
        double r5318134 = pow(r5318128, r5318132);
        double r5318135 = r5318133 - r5318134;
        return r5318135;
}


double f_of(float x, float n) {
        float r5318136 = n;
        float r5318137 = -8.279812664685517e+25f;
        bool r5318138 = r5318136 <= r5318137;
        float r5318139 = 1.0f;
        float r5318140 = x;
        float r5318141 = r5318136 * r5318140;
        float r5318142 = r5318139 / r5318141;
        float r5318143 = 0.5f;
        float r5318144 = r5318140 * r5318140;
        float r5318145 = r5318136 * r5318144;
        float r5318146 = r5318139 / r5318145;
        float r5318147 = r5318143 * r5318146;
        float r5318148 = log(r5318140);
        float r5318149 = r5318136 * r5318136;
        float r5318150 = r5318149 * r5318140;
        float r5318151 = r5318148 / r5318150;
        float r5318152 = r5318147 - r5318151;
        float r5318153 = r5318142 - r5318152;
        float r5318154 = 15558334820591744.0f;
        bool r5318155 = r5318136 <= r5318154;
        float r5318156 = r5318140 + r5318139;
        float r5318157 = r5318139 / r5318136;
        float r5318158 = pow(r5318156, r5318157);
        float r5318159 = pow(r5318140, r5318157);
        float r5318160 = r5318158 - r5318159;
        float r5318161 = r5318155 ? r5318160 : r5318153;
        float r5318162 = r5318138 ? r5318153 : r5318161;
        return r5318162;
}

double f_od(double x, double n) {
        double r5318163 = n;
        double r5318164 = -8.279812664685517e+25;
        bool r5318165 = r5318163 <= r5318164;
        double r5318166 = 1.0;
        double r5318167 = x;
        double r5318168 = r5318163 * r5318167;
        double r5318169 = r5318166 / r5318168;
        double r5318170 = 0.5;
        double r5318171 = r5318167 * r5318167;
        double r5318172 = r5318163 * r5318171;
        double r5318173 = r5318166 / r5318172;
        double r5318174 = r5318170 * r5318173;
        double r5318175 = log(r5318167);
        double r5318176 = r5318163 * r5318163;
        double r5318177 = r5318176 * r5318167;
        double r5318178 = r5318175 / r5318177;
        double r5318179 = r5318174 - r5318178;
        double r5318180 = r5318169 - r5318179;
        double r5318181 = 15558334820591744.0;
        bool r5318182 = r5318163 <= r5318181;
        double r5318183 = r5318167 + r5318166;
        double r5318184 = r5318166 / r5318163;
        double r5318185 = pow(r5318183, r5318184);
        double r5318186 = pow(r5318167, r5318184);
        double r5318187 = r5318185 - r5318186;
        double r5318188 = r5318182 ? r5318187 : r5318180;
        double r5318189 = r5318165 ? r5318180 : r5318188;
        return r5318189;
}

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 r5318190, r5318191, r5318192, r5318193, r5318194, r5318195, r5318196, r5318197;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5318190);
        mpfr_init_set_str(r5318191, "1", 10, MPFR_RNDN);
        mpfr_init(r5318192);
        mpfr_init(r5318193);
        mpfr_init(r5318194);
        mpfr_init(r5318195);
        mpfr_init(r5318196);
        mpfr_init(r5318197);
}

double f_im(double x, double n) {
        mpfr_set_d(r5318190, x, MPFR_RNDN);
        ;
        mpfr_add(r5318192, r5318190, r5318191, MPFR_RNDN);
        mpfr_set_d(r5318193, n, MPFR_RNDN);
        mpfr_div(r5318194, r5318191, r5318193, MPFR_RNDN);
        mpfr_pow(r5318195, r5318192, r5318194, MPFR_RNDN);
        mpfr_pow(r5318196, r5318190, r5318194, MPFR_RNDN);
        mpfr_sub(r5318197, r5318195, r5318196, MPFR_RNDN);
        return mpfr_get_d(r5318197, MPFR_RNDN);
}

static mpfr_t r5318198, r5318199, r5318200, r5318201, r5318202, r5318203, r5318204, r5318205, r5318206, r5318207, r5318208, r5318209, r5318210, r5318211, r5318212, r5318213, r5318214, r5318215, r5318216, r5318217, r5318218, r5318219, r5318220, r5318221, r5318222, r5318223, r5318224;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5318198);
        mpfr_init_set_str(r5318199, "-8.279812664685517e+25", 10, MPFR_RNDN);
        mpfr_init(r5318200);
        mpfr_init_set_str(r5318201, "1", 10, MPFR_RNDN);
        mpfr_init(r5318202);
        mpfr_init(r5318203);
        mpfr_init(r5318204);
        mpfr_init_set_str(r5318205, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5318206);
        mpfr_init(r5318207);
        mpfr_init(r5318208);
        mpfr_init(r5318209);
        mpfr_init(r5318210);
        mpfr_init(r5318211);
        mpfr_init(r5318212);
        mpfr_init(r5318213);
        mpfr_init(r5318214);
        mpfr_init(r5318215);
        mpfr_init_set_str(r5318216, "15558334820591744.0", 10, MPFR_RNDN);
        mpfr_init(r5318217);
        mpfr_init(r5318218);
        mpfr_init(r5318219);
        mpfr_init(r5318220);
        mpfr_init(r5318221);
        mpfr_init(r5318222);
        mpfr_init(r5318223);
        mpfr_init(r5318224);
}

double f_fm(double x, double n) {
        mpfr_set_d(r5318198, n, MPFR_RNDN);
        ;
        mpfr_set_si(r5318200, mpfr_cmp(r5318198, r5318199) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r5318202, x, MPFR_RNDN);
        mpfr_mul(r5318203, r5318198, r5318202, MPFR_RNDN);
        mpfr_div(r5318204, r5318201, r5318203, MPFR_RNDN);
        ;
        mpfr_sqr(r5318206, r5318202, MPFR_RNDN);
        mpfr_mul(r5318207, r5318198, r5318206, MPFR_RNDN);
        mpfr_div(r5318208, r5318201, r5318207, MPFR_RNDN);
        mpfr_mul(r5318209, r5318205, r5318208, MPFR_RNDN);
        mpfr_log(r5318210, r5318202, MPFR_RNDN);
        mpfr_sqr(r5318211, r5318198, MPFR_RNDN);
        mpfr_mul(r5318212, r5318211, r5318202, MPFR_RNDN);
        mpfr_div(r5318213, r5318210, r5318212, MPFR_RNDN);
        mpfr_sub(r5318214, r5318209, r5318213, MPFR_RNDN);
        mpfr_sub(r5318215, r5318204, r5318214, MPFR_RNDN);
        ;
        mpfr_set_si(r5318217, mpfr_cmp(r5318198, r5318216) <= 0, MPFR_RNDN);
        mpfr_add(r5318218, r5318202, r5318201, MPFR_RNDN);
        mpfr_div(r5318219, r5318201, r5318198, MPFR_RNDN);
        mpfr_pow(r5318220, r5318218, r5318219, MPFR_RNDN);
        mpfr_pow(r5318221, r5318202, r5318219, MPFR_RNDN);
        mpfr_sub(r5318222, r5318220, r5318221, MPFR_RNDN);
        if (mpfr_get_si(r5318217, MPFR_RNDN)) { mpfr_set(r5318223, r5318222, MPFR_RNDN); } else { mpfr_set(r5318223, r5318215, MPFR_RNDN); };
        if (mpfr_get_si(r5318200, MPFR_RNDN)) { mpfr_set(r5318224, r5318215, MPFR_RNDN); } else { mpfr_set(r5318224, r5318223, MPFR_RNDN); };
        return mpfr_get_d(r5318224, MPFR_RNDN);
}

static mpfr_t r5318225, r5318226, r5318227, r5318228, r5318229, r5318230, r5318231, r5318232, r5318233, r5318234, r5318235, r5318236, r5318237, r5318238, r5318239, r5318240, r5318241, r5318242, r5318243, r5318244, r5318245, r5318246, r5318247, r5318248, r5318249, r5318250, r5318251;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5318225);
        mpfr_init_set_str(r5318226, "-8.279812664685517e+25", 10, MPFR_RNDN);
        mpfr_init(r5318227);
        mpfr_init_set_str(r5318228, "1", 10, MPFR_RNDN);
        mpfr_init(r5318229);
        mpfr_init(r5318230);
        mpfr_init(r5318231);
        mpfr_init_set_str(r5318232, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5318233);
        mpfr_init(r5318234);
        mpfr_init(r5318235);
        mpfr_init(r5318236);
        mpfr_init(r5318237);
        mpfr_init(r5318238);
        mpfr_init(r5318239);
        mpfr_init(r5318240);
        mpfr_init(r5318241);
        mpfr_init(r5318242);
        mpfr_init_set_str(r5318243, "15558334820591744.0", 10, MPFR_RNDN);
        mpfr_init(r5318244);
        mpfr_init(r5318245);
        mpfr_init(r5318246);
        mpfr_init(r5318247);
        mpfr_init(r5318248);
        mpfr_init(r5318249);
        mpfr_init(r5318250);
        mpfr_init(r5318251);
}

double f_dm(double x, double n) {
        mpfr_set_d(r5318225, n, MPFR_RNDN);
        ;
        mpfr_set_si(r5318227, mpfr_cmp(r5318225, r5318226) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r5318229, x, MPFR_RNDN);
        mpfr_mul(r5318230, r5318225, r5318229, MPFR_RNDN);
        mpfr_div(r5318231, r5318228, r5318230, MPFR_RNDN);
        ;
        mpfr_sqr(r5318233, r5318229, MPFR_RNDN);
        mpfr_mul(r5318234, r5318225, r5318233, MPFR_RNDN);
        mpfr_div(r5318235, r5318228, r5318234, MPFR_RNDN);
        mpfr_mul(r5318236, r5318232, r5318235, MPFR_RNDN);
        mpfr_log(r5318237, r5318229, MPFR_RNDN);
        mpfr_sqr(r5318238, r5318225, MPFR_RNDN);
        mpfr_mul(r5318239, r5318238, r5318229, MPFR_RNDN);
        mpfr_div(r5318240, r5318237, r5318239, MPFR_RNDN);
        mpfr_sub(r5318241, r5318236, r5318240, MPFR_RNDN);
        mpfr_sub(r5318242, r5318231, r5318241, MPFR_RNDN);
        ;
        mpfr_set_si(r5318244, mpfr_cmp(r5318225, r5318243) <= 0, MPFR_RNDN);
        mpfr_add(r5318245, r5318229, r5318228, MPFR_RNDN);
        mpfr_div(r5318246, r5318228, r5318225, MPFR_RNDN);
        mpfr_pow(r5318247, r5318245, r5318246, MPFR_RNDN);
        mpfr_pow(r5318248, r5318229, r5318246, MPFR_RNDN);
        mpfr_sub(r5318249, r5318247, r5318248, MPFR_RNDN);
        if (mpfr_get_si(r5318244, MPFR_RNDN)) { mpfr_set(r5318250, r5318249, MPFR_RNDN); } else { mpfr_set(r5318250, r5318242, MPFR_RNDN); };
        if (mpfr_get_si(r5318227, MPFR_RNDN)) { mpfr_set(r5318251, r5318242, MPFR_RNDN); } else { mpfr_set(r5318251, r5318250, MPFR_RNDN); };
        return mpfr_get_d(r5318251, MPFR_RNDN);
}

