#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 r5352367 = x;
        float r5352368 = 1.0f;
        float r5352369 = r5352367 + r5352368;
        float r5352370 = n;
        float r5352371 = r5352368 / r5352370;
        float r5352372 = pow(r5352369, r5352371);
        float r5352373 = pow(r5352367, r5352371);
        float r5352374 = r5352372 - r5352373;
        return r5352374;
}

double f_id(double x, double n) {
        double r5352375 = x;
        double r5352376 = 1.0;
        double r5352377 = r5352375 + r5352376;
        double r5352378 = n;
        double r5352379 = r5352376 / r5352378;
        double r5352380 = pow(r5352377, r5352379);
        double r5352381 = pow(r5352375, r5352379);
        double r5352382 = r5352380 - r5352381;
        return r5352382;
}


double f_of(float x, float n) {
        float r5352383 = n;
        float r5352384 = -1626677269.8521662f;
        bool r5352385 = r5352383 <= r5352384;
        float r5352386 = x;
        float r5352387 = 1.0f;
        float r5352388 = r5352387 / r5352383;
        float r5352389 = pow(r5352386, r5352388);
        float r5352390 = sqrt(r5352389);
        float r5352391 = r5352386 + r5352387;
        float r5352392 = pow(r5352391, r5352388);
        float r5352393 = sqrt(r5352392);
        float r5352394 = r5352390 + r5352393;
        float r5352395 = 0.5f;
        float r5352396 = r5352395 / r5352386;
        float r5352397 = r5352396 / r5352383;
        float r5352398 = log(r5352386);
        float r5352399 = 0.25f;
        float r5352400 = r5352399 / r5352386;
        float r5352401 = r5352398 * r5352400;
        float r5352402 = r5352383 * r5352383;
        float r5352403 = r5352401 / r5352402;
        float r5352404 = r5352399 / r5352383;
        float r5352405 = r5352386 * r5352386;
        float r5352406 = r5352404 / r5352405;
        float r5352407 = r5352403 + r5352406;
        float r5352408 = r5352397 - r5352407;
        float r5352409 = r5352394 * r5352408;
        float r5352410 = 64407249603897.836f;
        bool r5352411 = r5352383 <= r5352410;
        float r5352412 = r5352393 + r5352390;
        float r5352413 = r5352393 - r5352390;
        float r5352414 = exp(r5352413);
        float r5352415 = log(r5352414);
        float r5352416 = r5352412 * r5352415;
        float r5352417 = r5352411 ? r5352416 : r5352409;
        float r5352418 = r5352385 ? r5352409 : r5352417;
        return r5352418;
}

double f_od(double x, double n) {
        double r5352419 = n;
        double r5352420 = -1626677269.8521662;
        bool r5352421 = r5352419 <= r5352420;
        double r5352422 = x;
        double r5352423 = 1.0;
        double r5352424 = r5352423 / r5352419;
        double r5352425 = pow(r5352422, r5352424);
        double r5352426 = sqrt(r5352425);
        double r5352427 = r5352422 + r5352423;
        double r5352428 = pow(r5352427, r5352424);
        double r5352429 = sqrt(r5352428);
        double r5352430 = r5352426 + r5352429;
        double r5352431 = 0.5;
        double r5352432 = r5352431 / r5352422;
        double r5352433 = r5352432 / r5352419;
        double r5352434 = log(r5352422);
        double r5352435 = 0.25;
        double r5352436 = r5352435 / r5352422;
        double r5352437 = r5352434 * r5352436;
        double r5352438 = r5352419 * r5352419;
        double r5352439 = r5352437 / r5352438;
        double r5352440 = r5352435 / r5352419;
        double r5352441 = r5352422 * r5352422;
        double r5352442 = r5352440 / r5352441;
        double r5352443 = r5352439 + r5352442;
        double r5352444 = r5352433 - r5352443;
        double r5352445 = r5352430 * r5352444;
        double r5352446 = 64407249603897.836;
        bool r5352447 = r5352419 <= r5352446;
        double r5352448 = r5352429 + r5352426;
        double r5352449 = r5352429 - r5352426;
        double r5352450 = exp(r5352449);
        double r5352451 = log(r5352450);
        double r5352452 = r5352448 * r5352451;
        double r5352453 = r5352447 ? r5352452 : r5352445;
        double r5352454 = r5352421 ? r5352445 : r5352453;
        return r5352454;
}

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 r5352455, r5352456, r5352457, r5352458, r5352459, r5352460, r5352461, r5352462;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5352455);
        mpfr_init_set_str(r5352456, "1", 10, MPFR_RNDN);
        mpfr_init(r5352457);
        mpfr_init(r5352458);
        mpfr_init(r5352459);
        mpfr_init(r5352460);
        mpfr_init(r5352461);
        mpfr_init(r5352462);
}

double f_im(double x, double n) {
        mpfr_set_d(r5352455, x, MPFR_RNDN);
        ;
        mpfr_add(r5352457, r5352455, r5352456, MPFR_RNDN);
        mpfr_set_d(r5352458, n, MPFR_RNDN);
        mpfr_div(r5352459, r5352456, r5352458, MPFR_RNDN);
        mpfr_pow(r5352460, r5352457, r5352459, MPFR_RNDN);
        mpfr_pow(r5352461, r5352455, r5352459, MPFR_RNDN);
        mpfr_sub(r5352462, r5352460, r5352461, MPFR_RNDN);
        return mpfr_get_d(r5352462, MPFR_RNDN);
}

static mpfr_t r5352463, r5352464, r5352465, r5352466, r5352467, r5352468, r5352469, r5352470, r5352471, r5352472, r5352473, r5352474, r5352475, r5352476, r5352477, r5352478, r5352479, r5352480, r5352481, r5352482, r5352483, r5352484, r5352485, r5352486, r5352487, r5352488, r5352489, r5352490, r5352491, r5352492, r5352493, r5352494, r5352495, r5352496, r5352497, r5352498;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5352463);
        mpfr_init_set_str(r5352464, "-1626677269.8521662", 10, MPFR_RNDN);
        mpfr_init(r5352465);
        mpfr_init(r5352466);
        mpfr_init_set_str(r5352467, "1", 10, MPFR_RNDN);
        mpfr_init(r5352468);
        mpfr_init(r5352469);
        mpfr_init(r5352470);
        mpfr_init(r5352471);
        mpfr_init(r5352472);
        mpfr_init(r5352473);
        mpfr_init(r5352474);
        mpfr_init_set_str(r5352475, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5352476);
        mpfr_init(r5352477);
        mpfr_init(r5352478);
        mpfr_init_set_str(r5352479, "1/4", 10, MPFR_RNDN);
        mpfr_init(r5352480);
        mpfr_init(r5352481);
        mpfr_init(r5352482);
        mpfr_init(r5352483);
        mpfr_init(r5352484);
        mpfr_init(r5352485);
        mpfr_init(r5352486);
        mpfr_init(r5352487);
        mpfr_init(r5352488);
        mpfr_init(r5352489);
        mpfr_init_set_str(r5352490, "64407249603897.836", 10, MPFR_RNDN);
        mpfr_init(r5352491);
        mpfr_init(r5352492);
        mpfr_init(r5352493);
        mpfr_init(r5352494);
        mpfr_init(r5352495);
        mpfr_init(r5352496);
        mpfr_init(r5352497);
        mpfr_init(r5352498);
}

double f_fm(double x, double n) {
        mpfr_set_d(r5352463, n, MPFR_RNDN);
        ;
        mpfr_set_si(r5352465, mpfr_cmp(r5352463, r5352464) <= 0, MPFR_RNDN);
        mpfr_set_d(r5352466, x, MPFR_RNDN);
        ;
        mpfr_div(r5352468, r5352467, r5352463, MPFR_RNDN);
        mpfr_pow(r5352469, r5352466, r5352468, MPFR_RNDN);
        mpfr_sqrt(r5352470, r5352469, MPFR_RNDN);
        mpfr_add(r5352471, r5352466, r5352467, MPFR_RNDN);
        mpfr_pow(r5352472, r5352471, r5352468, MPFR_RNDN);
        mpfr_sqrt(r5352473, r5352472, MPFR_RNDN);
        mpfr_add(r5352474, r5352470, r5352473, MPFR_RNDN);
        ;
        mpfr_div(r5352476, r5352475, r5352466, MPFR_RNDN);
        mpfr_div(r5352477, r5352476, r5352463, MPFR_RNDN);
        mpfr_log(r5352478, r5352466, MPFR_RNDN);
        ;
        mpfr_div(r5352480, r5352479, r5352466, MPFR_RNDN);
        mpfr_mul(r5352481, r5352478, r5352480, MPFR_RNDN);
        mpfr_mul(r5352482, r5352463, r5352463, MPFR_RNDN);
        mpfr_div(r5352483, r5352481, r5352482, MPFR_RNDN);
        mpfr_div(r5352484, r5352479, r5352463, MPFR_RNDN);
        mpfr_sqr(r5352485, r5352466, MPFR_RNDN);
        mpfr_div(r5352486, r5352484, r5352485, MPFR_RNDN);
        mpfr_add(r5352487, r5352483, r5352486, MPFR_RNDN);
        mpfr_sub(r5352488, r5352477, r5352487, MPFR_RNDN);
        mpfr_mul(r5352489, r5352474, r5352488, MPFR_RNDN);
        ;
        mpfr_set_si(r5352491, mpfr_cmp(r5352463, r5352490) <= 0, MPFR_RNDN);
        mpfr_add(r5352492, r5352473, r5352470, MPFR_RNDN);
        mpfr_sub(r5352493, r5352473, r5352470, MPFR_RNDN);
        mpfr_exp(r5352494, r5352493, MPFR_RNDN);
        mpfr_log(r5352495, r5352494, MPFR_RNDN);
        mpfr_mul(r5352496, r5352492, r5352495, MPFR_RNDN);
        if (mpfr_get_si(r5352491, MPFR_RNDN)) { mpfr_set(r5352497, r5352496, MPFR_RNDN); } else { mpfr_set(r5352497, r5352489, MPFR_RNDN); };
        if (mpfr_get_si(r5352465, MPFR_RNDN)) { mpfr_set(r5352498, r5352489, MPFR_RNDN); } else { mpfr_set(r5352498, r5352497, MPFR_RNDN); };
        return mpfr_get_d(r5352498, MPFR_RNDN);
}

static mpfr_t r5352499, r5352500, r5352501, r5352502, r5352503, r5352504, r5352505, r5352506, r5352507, r5352508, r5352509, r5352510, r5352511, r5352512, r5352513, r5352514, r5352515, r5352516, r5352517, r5352518, r5352519, r5352520, r5352521, r5352522, r5352523, r5352524, r5352525, r5352526, r5352527, r5352528, r5352529, r5352530, r5352531, r5352532, r5352533, r5352534;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5352499);
        mpfr_init_set_str(r5352500, "-1626677269.8521662", 10, MPFR_RNDN);
        mpfr_init(r5352501);
        mpfr_init(r5352502);
        mpfr_init_set_str(r5352503, "1", 10, MPFR_RNDN);
        mpfr_init(r5352504);
        mpfr_init(r5352505);
        mpfr_init(r5352506);
        mpfr_init(r5352507);
        mpfr_init(r5352508);
        mpfr_init(r5352509);
        mpfr_init(r5352510);
        mpfr_init_set_str(r5352511, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5352512);
        mpfr_init(r5352513);
        mpfr_init(r5352514);
        mpfr_init_set_str(r5352515, "1/4", 10, MPFR_RNDN);
        mpfr_init(r5352516);
        mpfr_init(r5352517);
        mpfr_init(r5352518);
        mpfr_init(r5352519);
        mpfr_init(r5352520);
        mpfr_init(r5352521);
        mpfr_init(r5352522);
        mpfr_init(r5352523);
        mpfr_init(r5352524);
        mpfr_init(r5352525);
        mpfr_init_set_str(r5352526, "64407249603897.836", 10, MPFR_RNDN);
        mpfr_init(r5352527);
        mpfr_init(r5352528);
        mpfr_init(r5352529);
        mpfr_init(r5352530);
        mpfr_init(r5352531);
        mpfr_init(r5352532);
        mpfr_init(r5352533);
        mpfr_init(r5352534);
}

double f_dm(double x, double n) {
        mpfr_set_d(r5352499, n, MPFR_RNDN);
        ;
        mpfr_set_si(r5352501, mpfr_cmp(r5352499, r5352500) <= 0, MPFR_RNDN);
        mpfr_set_d(r5352502, x, MPFR_RNDN);
        ;
        mpfr_div(r5352504, r5352503, r5352499, MPFR_RNDN);
        mpfr_pow(r5352505, r5352502, r5352504, MPFR_RNDN);
        mpfr_sqrt(r5352506, r5352505, MPFR_RNDN);
        mpfr_add(r5352507, r5352502, r5352503, MPFR_RNDN);
        mpfr_pow(r5352508, r5352507, r5352504, MPFR_RNDN);
        mpfr_sqrt(r5352509, r5352508, MPFR_RNDN);
        mpfr_add(r5352510, r5352506, r5352509, MPFR_RNDN);
        ;
        mpfr_div(r5352512, r5352511, r5352502, MPFR_RNDN);
        mpfr_div(r5352513, r5352512, r5352499, MPFR_RNDN);
        mpfr_log(r5352514, r5352502, MPFR_RNDN);
        ;
        mpfr_div(r5352516, r5352515, r5352502, MPFR_RNDN);
        mpfr_mul(r5352517, r5352514, r5352516, MPFR_RNDN);
        mpfr_mul(r5352518, r5352499, r5352499, MPFR_RNDN);
        mpfr_div(r5352519, r5352517, r5352518, MPFR_RNDN);
        mpfr_div(r5352520, r5352515, r5352499, MPFR_RNDN);
        mpfr_sqr(r5352521, r5352502, MPFR_RNDN);
        mpfr_div(r5352522, r5352520, r5352521, MPFR_RNDN);
        mpfr_add(r5352523, r5352519, r5352522, MPFR_RNDN);
        mpfr_sub(r5352524, r5352513, r5352523, MPFR_RNDN);
        mpfr_mul(r5352525, r5352510, r5352524, MPFR_RNDN);
        ;
        mpfr_set_si(r5352527, mpfr_cmp(r5352499, r5352526) <= 0, MPFR_RNDN);
        mpfr_add(r5352528, r5352509, r5352506, MPFR_RNDN);
        mpfr_sub(r5352529, r5352509, r5352506, MPFR_RNDN);
        mpfr_exp(r5352530, r5352529, MPFR_RNDN);
        mpfr_log(r5352531, r5352530, MPFR_RNDN);
        mpfr_mul(r5352532, r5352528, r5352531, MPFR_RNDN);
        if (mpfr_get_si(r5352527, MPFR_RNDN)) { mpfr_set(r5352533, r5352532, MPFR_RNDN); } else { mpfr_set(r5352533, r5352525, MPFR_RNDN); };
        if (mpfr_get_si(r5352501, MPFR_RNDN)) { mpfr_set(r5352534, r5352525, MPFR_RNDN); } else { mpfr_set(r5352534, r5352533, MPFR_RNDN); };
        return mpfr_get_d(r5352534, MPFR_RNDN);
}

