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

char *name = "2nthrt (problem 3.4.6)";

double f_if(float x, float n) {
        float r5180434 = x;
        float r5180435 = 1.0f;
        float r5180436 = r5180434 + r5180435;
        float r5180437 = n;
        float r5180438 = r5180435 / r5180437;
        float r5180439 = pow(r5180436, r5180438);
        float r5180440 = pow(r5180434, r5180438);
        float r5180441 = r5180439 - r5180440;
        return r5180441;
}

double f_id(double x, double n) {
        double r5180442 = x;
        double r5180443 = 1.0;
        double r5180444 = r5180442 + r5180443;
        double r5180445 = n;
        double r5180446 = r5180443 / r5180445;
        double r5180447 = pow(r5180444, r5180446);
        double r5180448 = pow(r5180442, r5180446);
        double r5180449 = r5180447 - r5180448;
        return r5180449;
}


double f_of(float x, float n) {
        float r5180450 = n;
        float r5180451 = -2744589958.7011433f;
        bool r5180452 = r5180450 <= r5180451;
        float r5180453 = 1.0f;
        float r5180454 = x;
        float r5180455 = r5180450 * r5180454;
        float r5180456 = r5180453 / r5180455;
        float r5180457 = 0.5f;
        float r5180458 = r5180454 * r5180454;
        float r5180459 = r5180450 * r5180458;
        float r5180460 = r5180453 / r5180459;
        float r5180461 = r5180457 * r5180460;
        float r5180462 = log(r5180454);
        float r5180463 = r5180450 * r5180450;
        float r5180464 = r5180463 * r5180454;
        float r5180465 = r5180462 / r5180464;
        float r5180466 = r5180461 + r5180465;
        float r5180467 = r5180456 - r5180466;
        float r5180468 = 2.6712054680957466e+25f;
        bool r5180469 = r5180450 <= r5180468;
        float r5180470 = r5180454 + r5180453;
        float r5180471 = r5180453 / r5180450;
        float r5180472 = pow(r5180470, r5180471);
        float r5180473 = pow(r5180454, r5180471);
        float r5180474 = r5180472 - r5180473;
        float r5180475 = log(r5180474);
        float r5180476 = exp(r5180475);
        float r5180477 = r5180469 ? r5180476 : r5180467;
        float r5180478 = r5180452 ? r5180467 : r5180477;
        return r5180478;
}

double f_od(double x, double n) {
        double r5180479 = n;
        double r5180480 = -2744589958.7011433;
        bool r5180481 = r5180479 <= r5180480;
        double r5180482 = 1.0;
        double r5180483 = x;
        double r5180484 = r5180479 * r5180483;
        double r5180485 = r5180482 / r5180484;
        double r5180486 = 0.5;
        double r5180487 = r5180483 * r5180483;
        double r5180488 = r5180479 * r5180487;
        double r5180489 = r5180482 / r5180488;
        double r5180490 = r5180486 * r5180489;
        double r5180491 = log(r5180483);
        double r5180492 = r5180479 * r5180479;
        double r5180493 = r5180492 * r5180483;
        double r5180494 = r5180491 / r5180493;
        double r5180495 = r5180490 + r5180494;
        double r5180496 = r5180485 - r5180495;
        double r5180497 = 2.6712054680957466e+25;
        bool r5180498 = r5180479 <= r5180497;
        double r5180499 = r5180483 + r5180482;
        double r5180500 = r5180482 / r5180479;
        double r5180501 = pow(r5180499, r5180500);
        double r5180502 = pow(r5180483, r5180500);
        double r5180503 = r5180501 - r5180502;
        double r5180504 = log(r5180503);
        double r5180505 = exp(r5180504);
        double r5180506 = r5180498 ? r5180505 : r5180496;
        double r5180507 = r5180481 ? r5180496 : r5180506;
        return r5180507;
}

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 r5180508, r5180509, r5180510, r5180511, r5180512, r5180513, r5180514, r5180515;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r5180508);
        mpfr_init_set_str(r5180509, "1", 10, MPFR_RNDN);
        mpfr_init(r5180510);
        mpfr_init(r5180511);
        mpfr_init(r5180512);
        mpfr_init(r5180513);
        mpfr_init(r5180514);
        mpfr_init(r5180515);
}

double f_im(double x, double n) {
        mpfr_set_d(r5180508, x, MPFR_RNDN);
        ;
        mpfr_add(r5180510, r5180508, r5180509, MPFR_RNDN);
        mpfr_set_d(r5180511, n, MPFR_RNDN);
        mpfr_div(r5180512, r5180509, r5180511, MPFR_RNDN);
        mpfr_pow(r5180513, r5180510, r5180512, MPFR_RNDN);
        mpfr_pow(r5180514, r5180508, r5180512, MPFR_RNDN);
        mpfr_sub(r5180515, r5180513, r5180514, MPFR_RNDN);
        return mpfr_get_d(r5180515, MPFR_RNDN);
}

static mpfr_t r5180516, r5180517, r5180518, r5180519, r5180520, r5180521, r5180522, r5180523, r5180524, r5180525, r5180526, r5180527, r5180528, r5180529, r5180530, r5180531, r5180532, r5180533, r5180534, r5180535, r5180536, r5180537, r5180538, r5180539, r5180540, r5180541, r5180542, r5180543, r5180544;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r5180516);
        mpfr_init_set_str(r5180517, "-2744589958.7011433", 10, MPFR_RNDN);
        mpfr_init(r5180518);
        mpfr_init_set_str(r5180519, "1", 10, MPFR_RNDN);
        mpfr_init(r5180520);
        mpfr_init(r5180521);
        mpfr_init(r5180522);
        mpfr_init_set_str(r5180523, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5180524);
        mpfr_init(r5180525);
        mpfr_init(r5180526);
        mpfr_init(r5180527);
        mpfr_init(r5180528);
        mpfr_init(r5180529);
        mpfr_init(r5180530);
        mpfr_init(r5180531);
        mpfr_init(r5180532);
        mpfr_init(r5180533);
        mpfr_init_set_str(r5180534, "2.6712054680957466e+25", 10, MPFR_RNDN);
        mpfr_init(r5180535);
        mpfr_init(r5180536);
        mpfr_init(r5180537);
        mpfr_init(r5180538);
        mpfr_init(r5180539);
        mpfr_init(r5180540);
        mpfr_init(r5180541);
        mpfr_init(r5180542);
        mpfr_init(r5180543);
        mpfr_init(r5180544);
}

double f_fm(double x, double n) {
        mpfr_set_d(r5180516, n, MPFR_RNDN);
        ;
        mpfr_set_si(r5180518, mpfr_cmp(r5180516, r5180517) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r5180520, x, MPFR_RNDN);
        mpfr_mul(r5180521, r5180516, r5180520, MPFR_RNDN);
        mpfr_div(r5180522, r5180519, r5180521, MPFR_RNDN);
        ;
        mpfr_sqr(r5180524, r5180520, MPFR_RNDN);
        mpfr_mul(r5180525, r5180516, r5180524, MPFR_RNDN);
        mpfr_div(r5180526, r5180519, r5180525, MPFR_RNDN);
        mpfr_mul(r5180527, r5180523, r5180526, MPFR_RNDN);
        mpfr_log(r5180528, r5180520, MPFR_RNDN);
        mpfr_sqr(r5180529, r5180516, MPFR_RNDN);
        mpfr_mul(r5180530, r5180529, r5180520, MPFR_RNDN);
        mpfr_div(r5180531, r5180528, r5180530, MPFR_RNDN);
        mpfr_add(r5180532, r5180527, r5180531, MPFR_RNDN);
        mpfr_sub(r5180533, r5180522, r5180532, MPFR_RNDN);
        ;
        mpfr_set_si(r5180535, mpfr_cmp(r5180516, r5180534) <= 0, MPFR_RNDN);
        mpfr_add(r5180536, r5180520, r5180519, MPFR_RNDN);
        mpfr_div(r5180537, r5180519, r5180516, MPFR_RNDN);
        mpfr_pow(r5180538, r5180536, r5180537, MPFR_RNDN);
        mpfr_pow(r5180539, r5180520, r5180537, MPFR_RNDN);
        mpfr_sub(r5180540, r5180538, r5180539, MPFR_RNDN);
        mpfr_log(r5180541, r5180540, MPFR_RNDN);
        mpfr_exp(r5180542, r5180541, MPFR_RNDN);
        if (mpfr_get_si(r5180535, MPFR_RNDN)) { mpfr_set(r5180543, r5180542, MPFR_RNDN); } else { mpfr_set(r5180543, r5180533, MPFR_RNDN); };
        if (mpfr_get_si(r5180518, MPFR_RNDN)) { mpfr_set(r5180544, r5180533, MPFR_RNDN); } else { mpfr_set(r5180544, r5180543, MPFR_RNDN); };
        return mpfr_get_d(r5180544, MPFR_RNDN);
}

static mpfr_t r5180545, r5180546, r5180547, r5180548, r5180549, r5180550, r5180551, r5180552, r5180553, r5180554, r5180555, r5180556, r5180557, r5180558, r5180559, r5180560, r5180561, r5180562, r5180563, r5180564, r5180565, r5180566, r5180567, r5180568, r5180569, r5180570, r5180571, r5180572, r5180573;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r5180545);
        mpfr_init_set_str(r5180546, "-2744589958.7011433", 10, MPFR_RNDN);
        mpfr_init(r5180547);
        mpfr_init_set_str(r5180548, "1", 10, MPFR_RNDN);
        mpfr_init(r5180549);
        mpfr_init(r5180550);
        mpfr_init(r5180551);
        mpfr_init_set_str(r5180552, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5180553);
        mpfr_init(r5180554);
        mpfr_init(r5180555);
        mpfr_init(r5180556);
        mpfr_init(r5180557);
        mpfr_init(r5180558);
        mpfr_init(r5180559);
        mpfr_init(r5180560);
        mpfr_init(r5180561);
        mpfr_init(r5180562);
        mpfr_init_set_str(r5180563, "2.6712054680957466e+25", 10, MPFR_RNDN);
        mpfr_init(r5180564);
        mpfr_init(r5180565);
        mpfr_init(r5180566);
        mpfr_init(r5180567);
        mpfr_init(r5180568);
        mpfr_init(r5180569);
        mpfr_init(r5180570);
        mpfr_init(r5180571);
        mpfr_init(r5180572);
        mpfr_init(r5180573);
}

double f_dm(double x, double n) {
        mpfr_set_d(r5180545, n, MPFR_RNDN);
        ;
        mpfr_set_si(r5180547, mpfr_cmp(r5180545, r5180546) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r5180549, x, MPFR_RNDN);
        mpfr_mul(r5180550, r5180545, r5180549, MPFR_RNDN);
        mpfr_div(r5180551, r5180548, r5180550, MPFR_RNDN);
        ;
        mpfr_sqr(r5180553, r5180549, MPFR_RNDN);
        mpfr_mul(r5180554, r5180545, r5180553, MPFR_RNDN);
        mpfr_div(r5180555, r5180548, r5180554, MPFR_RNDN);
        mpfr_mul(r5180556, r5180552, r5180555, MPFR_RNDN);
        mpfr_log(r5180557, r5180549, MPFR_RNDN);
        mpfr_sqr(r5180558, r5180545, MPFR_RNDN);
        mpfr_mul(r5180559, r5180558, r5180549, MPFR_RNDN);
        mpfr_div(r5180560, r5180557, r5180559, MPFR_RNDN);
        mpfr_add(r5180561, r5180556, r5180560, MPFR_RNDN);
        mpfr_sub(r5180562, r5180551, r5180561, MPFR_RNDN);
        ;
        mpfr_set_si(r5180564, mpfr_cmp(r5180545, r5180563) <= 0, MPFR_RNDN);
        mpfr_add(r5180565, r5180549, r5180548, MPFR_RNDN);
        mpfr_div(r5180566, r5180548, r5180545, MPFR_RNDN);
        mpfr_pow(r5180567, r5180565, r5180566, MPFR_RNDN);
        mpfr_pow(r5180568, r5180549, r5180566, MPFR_RNDN);
        mpfr_sub(r5180569, r5180567, r5180568, MPFR_RNDN);
        mpfr_log(r5180570, r5180569, MPFR_RNDN);
        mpfr_exp(r5180571, r5180570, MPFR_RNDN);
        if (mpfr_get_si(r5180564, MPFR_RNDN)) { mpfr_set(r5180572, r5180571, MPFR_RNDN); } else { mpfr_set(r5180572, r5180562, MPFR_RNDN); };
        if (mpfr_get_si(r5180547, MPFR_RNDN)) { mpfr_set(r5180573, r5180562, MPFR_RNDN); } else { mpfr_set(r5180573, r5180572, MPFR_RNDN); };
        return mpfr_get_d(r5180573, MPFR_RNDN);
}

