#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 r4617331 = x;
        float r4617332 = 1.0f;
        float r4617333 = r4617331 + r4617332;
        float r4617334 = n;
        float r4617335 = r4617332 / r4617334;
        float r4617336 = pow(r4617333, r4617335);
        float r4617337 = pow(r4617331, r4617335);
        float r4617338 = r4617336 - r4617337;
        return r4617338;
}

double f_id(double x, double n) {
        double r4617339 = x;
        double r4617340 = 1.0;
        double r4617341 = r4617339 + r4617340;
        double r4617342 = n;
        double r4617343 = r4617340 / r4617342;
        double r4617344 = pow(r4617341, r4617343);
        double r4617345 = pow(r4617339, r4617343);
        double r4617346 = r4617344 - r4617345;
        return r4617346;
}


double f_of(float x, float n) {
        float r4617347 = n;
        float r4617348 = -31.329673016395393f;
        bool r4617349 = r4617347 <= r4617348;
        float r4617350 = 1.0f;
        float r4617351 = r4617350 / r4617347;
        float r4617352 = x;
        float r4617353 = r4617351 / r4617352;
        float r4617354 = 0.5f;
        float r4617355 = r4617354 / r4617352;
        float r4617356 = r4617347 * r4617352;
        float r4617357 = r4617355 / r4617356;
        float r4617358 = r4617353 - r4617357;
        float r4617359 = log(r4617352);
        float r4617360 = r4617347 * r4617347;
        float r4617361 = r4617359 / r4617360;
        float r4617362 = r4617361 / r4617352;
        float r4617363 = r4617358 - r4617362;
        float r4617364 = 5667669302503732.0f;
        bool r4617365 = r4617347 <= r4617364;
        float r4617366 = r4617352 + r4617350;
        float r4617367 = pow(r4617366, r4617351);
        float r4617368 = pow(r4617352, r4617351);
        float r4617369 = r4617367 - r4617368;
        float r4617370 = cbrt(r4617369);
        float r4617371 = r4617370 * (r4617370 * r4617370);
        float r4617372 = r4617365 ? r4617371 : r4617363;
        float r4617373 = r4617349 ? r4617363 : r4617372;
        return r4617373;
}

double f_od(double x, double n) {
        double r4617374 = n;
        double r4617375 = -31.329673016395393;
        bool r4617376 = r4617374 <= r4617375;
        double r4617377 = 1.0;
        double r4617378 = r4617377 / r4617374;
        double r4617379 = x;
        double r4617380 = r4617378 / r4617379;
        double r4617381 = 0.5;
        double r4617382 = r4617381 / r4617379;
        double r4617383 = r4617374 * r4617379;
        double r4617384 = r4617382 / r4617383;
        double r4617385 = r4617380 - r4617384;
        double r4617386 = log(r4617379);
        double r4617387 = r4617374 * r4617374;
        double r4617388 = r4617386 / r4617387;
        double r4617389 = r4617388 / r4617379;
        double r4617390 = r4617385 - r4617389;
        double r4617391 = 5667669302503732.0;
        bool r4617392 = r4617374 <= r4617391;
        double r4617393 = r4617379 + r4617377;
        double r4617394 = pow(r4617393, r4617378);
        double r4617395 = pow(r4617379, r4617378);
        double r4617396 = r4617394 - r4617395;
        double r4617397 = cbrt(r4617396);
        double r4617398 = r4617397 * (r4617397 * r4617397);
        double r4617399 = r4617392 ? r4617398 : r4617390;
        double r4617400 = r4617376 ? r4617390 : r4617399;
        return r4617400;
}

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 r4617401, r4617402, r4617403, r4617404, r4617405, r4617406, r4617407, r4617408;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4617401);
        mpfr_init_set_str(r4617402, "1", 10, MPFR_RNDN);
        mpfr_init(r4617403);
        mpfr_init(r4617404);
        mpfr_init(r4617405);
        mpfr_init(r4617406);
        mpfr_init(r4617407);
        mpfr_init(r4617408);
}

double f_im(double x, double n) {
        mpfr_set_d(r4617401, x, MPFR_RNDN);
        ;
        mpfr_add(r4617403, r4617401, r4617402, MPFR_RNDN);
        mpfr_set_d(r4617404, n, MPFR_RNDN);
        mpfr_div(r4617405, r4617402, r4617404, MPFR_RNDN);
        mpfr_pow(r4617406, r4617403, r4617405, MPFR_RNDN);
        mpfr_pow(r4617407, r4617401, r4617405, MPFR_RNDN);
        mpfr_sub(r4617408, r4617406, r4617407, MPFR_RNDN);
        return mpfr_get_d(r4617408, MPFR_RNDN);
}

static mpfr_t r4617409, r4617410, r4617411, r4617412, r4617413, r4617414, r4617415, r4617416, r4617417, r4617418, r4617419, r4617420, r4617421, r4617422, r4617423, r4617424, r4617425, r4617426, r4617427, r4617428, r4617429, r4617430, r4617431, r4617432, r4617433, r4617434, r4617435;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4617409);
        mpfr_init_set_str(r4617410, "-31.329673016395393", 10, MPFR_RNDN);
        mpfr_init(r4617411);
        mpfr_init_set_str(r4617412, "1", 10, MPFR_RNDN);
        mpfr_init(r4617413);
        mpfr_init(r4617414);
        mpfr_init(r4617415);
        mpfr_init_set_str(r4617416, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4617417);
        mpfr_init(r4617418);
        mpfr_init(r4617419);
        mpfr_init(r4617420);
        mpfr_init(r4617421);
        mpfr_init(r4617422);
        mpfr_init(r4617423);
        mpfr_init(r4617424);
        mpfr_init(r4617425);
        mpfr_init_set_str(r4617426, "5667669302503732.0", 10, MPFR_RNDN);
        mpfr_init(r4617427);
        mpfr_init(r4617428);
        mpfr_init(r4617429);
        mpfr_init(r4617430);
        mpfr_init(r4617431);
        mpfr_init(r4617432);
        mpfr_init(r4617433);
        mpfr_init(r4617434);
        mpfr_init(r4617435);
}

double f_fm(double x, double n) {
        mpfr_set_d(r4617409, n, MPFR_RNDN);
        ;
        mpfr_set_si(r4617411, mpfr_cmp(r4617409, r4617410) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r4617413, r4617412, r4617409, MPFR_RNDN);
        mpfr_set_d(r4617414, x, MPFR_RNDN);
        mpfr_div(r4617415, r4617413, r4617414, MPFR_RNDN);
        ;
        mpfr_div(r4617417, r4617416, r4617414, MPFR_RNDN);
        mpfr_mul(r4617418, r4617409, r4617414, MPFR_RNDN);
        mpfr_div(r4617419, r4617417, r4617418, MPFR_RNDN);
        mpfr_sub(r4617420, r4617415, r4617419, MPFR_RNDN);
        mpfr_log(r4617421, r4617414, MPFR_RNDN);
        mpfr_mul(r4617422, r4617409, r4617409, MPFR_RNDN);
        mpfr_div(r4617423, r4617421, r4617422, MPFR_RNDN);
        mpfr_div(r4617424, r4617423, r4617414, MPFR_RNDN);
        mpfr_sub(r4617425, r4617420, r4617424, MPFR_RNDN);
        ;
        mpfr_set_si(r4617427, mpfr_cmp(r4617409, r4617426) <= 0, MPFR_RNDN);
        mpfr_add(r4617428, r4617414, r4617412, MPFR_RNDN);
        mpfr_pow(r4617429, r4617428, r4617413, MPFR_RNDN);
        mpfr_pow(r4617430, r4617414, r4617413, MPFR_RNDN);
        mpfr_sub(r4617431, r4617429, r4617430, MPFR_RNDN);
        mpfr_cbrt(r4617432, r4617431, MPFR_RNDN);
        mpfr_mul(r4617433, r4617432, r4617432, MPFR_RNDN); mpfr_mul(r4617433, r4617433, r4617432, MPFR_RNDN);
        if (mpfr_get_si(r4617427, MPFR_RNDN)) { mpfr_set(r4617434, r4617433, MPFR_RNDN); } else { mpfr_set(r4617434, r4617425, MPFR_RNDN); };
        if (mpfr_get_si(r4617411, MPFR_RNDN)) { mpfr_set(r4617435, r4617425, MPFR_RNDN); } else { mpfr_set(r4617435, r4617434, MPFR_RNDN); };
        return mpfr_get_d(r4617435, MPFR_RNDN);
}

static mpfr_t r4617436, r4617437, r4617438, r4617439, r4617440, r4617441, r4617442, r4617443, r4617444, r4617445, r4617446, r4617447, r4617448, r4617449, r4617450, r4617451, r4617452, r4617453, r4617454, r4617455, r4617456, r4617457, r4617458, r4617459, r4617460, r4617461, r4617462;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4617436);
        mpfr_init_set_str(r4617437, "-31.329673016395393", 10, MPFR_RNDN);
        mpfr_init(r4617438);
        mpfr_init_set_str(r4617439, "1", 10, MPFR_RNDN);
        mpfr_init(r4617440);
        mpfr_init(r4617441);
        mpfr_init(r4617442);
        mpfr_init_set_str(r4617443, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4617444);
        mpfr_init(r4617445);
        mpfr_init(r4617446);
        mpfr_init(r4617447);
        mpfr_init(r4617448);
        mpfr_init(r4617449);
        mpfr_init(r4617450);
        mpfr_init(r4617451);
        mpfr_init(r4617452);
        mpfr_init_set_str(r4617453, "5667669302503732.0", 10, MPFR_RNDN);
        mpfr_init(r4617454);
        mpfr_init(r4617455);
        mpfr_init(r4617456);
        mpfr_init(r4617457);
        mpfr_init(r4617458);
        mpfr_init(r4617459);
        mpfr_init(r4617460);
        mpfr_init(r4617461);
        mpfr_init(r4617462);
}

double f_dm(double x, double n) {
        mpfr_set_d(r4617436, n, MPFR_RNDN);
        ;
        mpfr_set_si(r4617438, mpfr_cmp(r4617436, r4617437) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r4617440, r4617439, r4617436, MPFR_RNDN);
        mpfr_set_d(r4617441, x, MPFR_RNDN);
        mpfr_div(r4617442, r4617440, r4617441, MPFR_RNDN);
        ;
        mpfr_div(r4617444, r4617443, r4617441, MPFR_RNDN);
        mpfr_mul(r4617445, r4617436, r4617441, MPFR_RNDN);
        mpfr_div(r4617446, r4617444, r4617445, MPFR_RNDN);
        mpfr_sub(r4617447, r4617442, r4617446, MPFR_RNDN);
        mpfr_log(r4617448, r4617441, MPFR_RNDN);
        mpfr_mul(r4617449, r4617436, r4617436, MPFR_RNDN);
        mpfr_div(r4617450, r4617448, r4617449, MPFR_RNDN);
        mpfr_div(r4617451, r4617450, r4617441, MPFR_RNDN);
        mpfr_sub(r4617452, r4617447, r4617451, MPFR_RNDN);
        ;
        mpfr_set_si(r4617454, mpfr_cmp(r4617436, r4617453) <= 0, MPFR_RNDN);
        mpfr_add(r4617455, r4617441, r4617439, MPFR_RNDN);
        mpfr_pow(r4617456, r4617455, r4617440, MPFR_RNDN);
        mpfr_pow(r4617457, r4617441, r4617440, MPFR_RNDN);
        mpfr_sub(r4617458, r4617456, r4617457, MPFR_RNDN);
        mpfr_cbrt(r4617459, r4617458, MPFR_RNDN);
        mpfr_mul(r4617460, r4617459, r4617459, MPFR_RNDN); mpfr_mul(r4617460, r4617460, r4617459, MPFR_RNDN);
        if (mpfr_get_si(r4617454, MPFR_RNDN)) { mpfr_set(r4617461, r4617460, MPFR_RNDN); } else { mpfr_set(r4617461, r4617452, MPFR_RNDN); };
        if (mpfr_get_si(r4617438, MPFR_RNDN)) { mpfr_set(r4617462, r4617452, MPFR_RNDN); } else { mpfr_set(r4617462, r4617461, MPFR_RNDN); };
        return mpfr_get_d(r4617462, MPFR_RNDN);
}

