#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 r36590 = x;
        float r36591 = 1;
        float r36592 = r36590 + r36591;
        float r36593 = n;
        float r36594 = r36591 / r36593;
        float r36595 = pow(r36592, r36594);
        float r36596 = pow(r36590, r36594);
        float r36597 = r36595 - r36596;
        return r36597;
}

double f_id(double x, double n) {
        double r36598 = x;
        double r36599 = 1;
        double r36600 = r36598 + r36599;
        double r36601 = n;
        double r36602 = r36599 / r36601;
        double r36603 = pow(r36600, r36602);
        double r36604 = pow(r36598, r36602);
        double r36605 = r36603 - r36604;
        return r36605;
}


double f_of(float x, float n) {
        float r36606 = n;
        float r36607 = -316.6254307243247;
        bool r36608 = r36606 <= r36607;
        float r36609 = 1;
        float r36610 = x;
        float r36611 = r36609 / r36610;
        float r36612 = r36611 / r36606;
        float r36613 = 1/2;
        float r36614 = r36613 / r36606;
        float r36615 = r36610 * r36610;
        float r36616 = r36614 / r36615;
        float r36617 = r36612 - r36616;
        float r36618 = log(r36610);
        float r36619 = r36606 * r36606;
        float r36620 = r36618 / r36619;
        float r36621 = r36620 / r36610;
        float r36622 = r36617 - r36621;
        float r36623 = 1474036971039.3018;
        bool r36624 = r36606 <= r36623;
        float r36625 = r36610 + r36609;
        float r36626 = r36609 / r36606;
        float r36627 = pow(r36625, r36626);
        float r36628 = pow(r36610, r36626);
        float r36629 = r36627 - r36628;
        float r36630 = exp(r36629);
        float r36631 = log(r36630);
        float r36632 = 3;
        float r36633 = pow(r36631, r36632);
        float r36634 = cbrt(r36633);
        float r36635 = r36624 ? r36634 : r36622;
        float r36636 = r36608 ? r36622 : r36635;
        return r36636;
}

double f_od(double x, double n) {
        double r36637 = n;
        double r36638 = -316.6254307243247;
        bool r36639 = r36637 <= r36638;
        double r36640 = 1;
        double r36641 = x;
        double r36642 = r36640 / r36641;
        double r36643 = r36642 / r36637;
        double r36644 = 1/2;
        double r36645 = r36644 / r36637;
        double r36646 = r36641 * r36641;
        double r36647 = r36645 / r36646;
        double r36648 = r36643 - r36647;
        double r36649 = log(r36641);
        double r36650 = r36637 * r36637;
        double r36651 = r36649 / r36650;
        double r36652 = r36651 / r36641;
        double r36653 = r36648 - r36652;
        double r36654 = 1474036971039.3018;
        bool r36655 = r36637 <= r36654;
        double r36656 = r36641 + r36640;
        double r36657 = r36640 / r36637;
        double r36658 = pow(r36656, r36657);
        double r36659 = pow(r36641, r36657);
        double r36660 = r36658 - r36659;
        double r36661 = exp(r36660);
        double r36662 = log(r36661);
        double r36663 = 3;
        double r36664 = pow(r36662, r36663);
        double r36665 = cbrt(r36664);
        double r36666 = r36655 ? r36665 : r36653;
        double r36667 = r36639 ? r36653 : r36666;
        return r36667;
}

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 r36668, r36669, r36670, r36671, r36672, r36673, r36674, r36675;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r36668);
        mpfr_init_set_str(r36669, "1", 10, MPFR_RNDN);
        mpfr_init(r36670);
        mpfr_init(r36671);
        mpfr_init(r36672);
        mpfr_init(r36673);
        mpfr_init(r36674);
        mpfr_init(r36675);
}

double f_im(double x, double n) {
        mpfr_set_d(r36668, x, MPFR_RNDN);
        ;
        mpfr_add(r36670, r36668, r36669, MPFR_RNDN);
        mpfr_set_d(r36671, n, MPFR_RNDN);
        mpfr_div(r36672, r36669, r36671, MPFR_RNDN);
        mpfr_pow(r36673, r36670, r36672, MPFR_RNDN);
        mpfr_pow(r36674, r36668, r36672, MPFR_RNDN);
        mpfr_sub(r36675, r36673, r36674, MPFR_RNDN);
        return mpfr_get_d(r36675, MPFR_RNDN);
}

static mpfr_t r36676, r36677, r36678, r36679, r36680, r36681, r36682, r36683, r36684, r36685, r36686, r36687, r36688, r36689, r36690, r36691, r36692, r36693, r36694, r36695, r36696, r36697, r36698, r36699, r36700, r36701, r36702, r36703, r36704, r36705, r36706;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r36676);
        mpfr_init_set_str(r36677, "-316.6254307243247", 10, MPFR_RNDN);
        mpfr_init(r36678);
        mpfr_init_set_str(r36679, "1", 10, MPFR_RNDN);
        mpfr_init(r36680);
        mpfr_init(r36681);
        mpfr_init(r36682);
        mpfr_init_set_str(r36683, "1/2", 10, MPFR_RNDN);
        mpfr_init(r36684);
        mpfr_init(r36685);
        mpfr_init(r36686);
        mpfr_init(r36687);
        mpfr_init(r36688);
        mpfr_init(r36689);
        mpfr_init(r36690);
        mpfr_init(r36691);
        mpfr_init(r36692);
        mpfr_init_set_str(r36693, "1474036971039.3018", 10, MPFR_RNDN);
        mpfr_init(r36694);
        mpfr_init(r36695);
        mpfr_init(r36696);
        mpfr_init(r36697);
        mpfr_init(r36698);
        mpfr_init(r36699);
        mpfr_init(r36700);
        mpfr_init(r36701);
        mpfr_init_set_str(r36702, "3", 10, MPFR_RNDN);
        mpfr_init(r36703);
        mpfr_init(r36704);
        mpfr_init(r36705);
        mpfr_init(r36706);
}

double f_fm(double x, double n) {
        mpfr_set_d(r36676, n, MPFR_RNDN);
        ;
        mpfr_set_si(r36678, mpfr_cmp(r36676, r36677) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r36680, x, MPFR_RNDN);
        mpfr_div(r36681, r36679, r36680, MPFR_RNDN);
        mpfr_div(r36682, r36681, r36676, MPFR_RNDN);
        ;
        mpfr_div(r36684, r36683, r36676, MPFR_RNDN);
        mpfr_mul(r36685, r36680, r36680, MPFR_RNDN);
        mpfr_div(r36686, r36684, r36685, MPFR_RNDN);
        mpfr_sub(r36687, r36682, r36686, MPFR_RNDN);
        mpfr_log(r36688, r36680, MPFR_RNDN);
        mpfr_mul(r36689, r36676, r36676, MPFR_RNDN);
        mpfr_div(r36690, r36688, r36689, MPFR_RNDN);
        mpfr_div(r36691, r36690, r36680, MPFR_RNDN);
        mpfr_sub(r36692, r36687, r36691, MPFR_RNDN);
        ;
        mpfr_set_si(r36694, mpfr_cmp(r36676, r36693) <= 0, MPFR_RNDN);
        mpfr_add(r36695, r36680, r36679, MPFR_RNDN);
        mpfr_div(r36696, r36679, r36676, MPFR_RNDN);
        mpfr_pow(r36697, r36695, r36696, MPFR_RNDN);
        mpfr_pow(r36698, r36680, r36696, MPFR_RNDN);
        mpfr_sub(r36699, r36697, r36698, MPFR_RNDN);
        mpfr_exp(r36700, r36699, MPFR_RNDN);
        mpfr_log(r36701, r36700, MPFR_RNDN);
        ;
        mpfr_pow(r36703, r36701, r36702, MPFR_RNDN);
        mpfr_cbrt(r36704, r36703, MPFR_RNDN);
        if (mpfr_get_si(r36694, MPFR_RNDN)) { mpfr_set(r36705, r36704, MPFR_RNDN); } else { mpfr_set(r36705, r36692, MPFR_RNDN); };
        if (mpfr_get_si(r36678, MPFR_RNDN)) { mpfr_set(r36706, r36692, MPFR_RNDN); } else { mpfr_set(r36706, r36705, MPFR_RNDN); };
        return mpfr_get_d(r36706, MPFR_RNDN);
}

static mpfr_t r36707, r36708, r36709, r36710, r36711, r36712, r36713, r36714, r36715, r36716, r36717, r36718, r36719, r36720, r36721, r36722, r36723, r36724, r36725, r36726, r36727, r36728, r36729, r36730, r36731, r36732, r36733, r36734, r36735, r36736, r36737;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r36707);
        mpfr_init_set_str(r36708, "-316.6254307243247", 10, MPFR_RNDN);
        mpfr_init(r36709);
        mpfr_init_set_str(r36710, "1", 10, MPFR_RNDN);
        mpfr_init(r36711);
        mpfr_init(r36712);
        mpfr_init(r36713);
        mpfr_init_set_str(r36714, "1/2", 10, MPFR_RNDN);
        mpfr_init(r36715);
        mpfr_init(r36716);
        mpfr_init(r36717);
        mpfr_init(r36718);
        mpfr_init(r36719);
        mpfr_init(r36720);
        mpfr_init(r36721);
        mpfr_init(r36722);
        mpfr_init(r36723);
        mpfr_init_set_str(r36724, "1474036971039.3018", 10, MPFR_RNDN);
        mpfr_init(r36725);
        mpfr_init(r36726);
        mpfr_init(r36727);
        mpfr_init(r36728);
        mpfr_init(r36729);
        mpfr_init(r36730);
        mpfr_init(r36731);
        mpfr_init(r36732);
        mpfr_init_set_str(r36733, "3", 10, MPFR_RNDN);
        mpfr_init(r36734);
        mpfr_init(r36735);
        mpfr_init(r36736);
        mpfr_init(r36737);
}

double f_dm(double x, double n) {
        mpfr_set_d(r36707, n, MPFR_RNDN);
        ;
        mpfr_set_si(r36709, mpfr_cmp(r36707, r36708) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r36711, x, MPFR_RNDN);
        mpfr_div(r36712, r36710, r36711, MPFR_RNDN);
        mpfr_div(r36713, r36712, r36707, MPFR_RNDN);
        ;
        mpfr_div(r36715, r36714, r36707, MPFR_RNDN);
        mpfr_mul(r36716, r36711, r36711, MPFR_RNDN);
        mpfr_div(r36717, r36715, r36716, MPFR_RNDN);
        mpfr_sub(r36718, r36713, r36717, MPFR_RNDN);
        mpfr_log(r36719, r36711, MPFR_RNDN);
        mpfr_mul(r36720, r36707, r36707, MPFR_RNDN);
        mpfr_div(r36721, r36719, r36720, MPFR_RNDN);
        mpfr_div(r36722, r36721, r36711, MPFR_RNDN);
        mpfr_sub(r36723, r36718, r36722, MPFR_RNDN);
        ;
        mpfr_set_si(r36725, mpfr_cmp(r36707, r36724) <= 0, MPFR_RNDN);
        mpfr_add(r36726, r36711, r36710, MPFR_RNDN);
        mpfr_div(r36727, r36710, r36707, MPFR_RNDN);
        mpfr_pow(r36728, r36726, r36727, MPFR_RNDN);
        mpfr_pow(r36729, r36711, r36727, MPFR_RNDN);
        mpfr_sub(r36730, r36728, r36729, MPFR_RNDN);
        mpfr_exp(r36731, r36730, MPFR_RNDN);
        mpfr_log(r36732, r36731, MPFR_RNDN);
        ;
        mpfr_pow(r36734, r36732, r36733, MPFR_RNDN);
        mpfr_cbrt(r36735, r36734, MPFR_RNDN);
        if (mpfr_get_si(r36725, MPFR_RNDN)) { mpfr_set(r36736, r36735, MPFR_RNDN); } else { mpfr_set(r36736, r36723, MPFR_RNDN); };
        if (mpfr_get_si(r36709, MPFR_RNDN)) { mpfr_set(r36737, r36723, MPFR_RNDN); } else { mpfr_set(r36737, r36736, MPFR_RNDN); };
        return mpfr_get_d(r36737, MPFR_RNDN);
}

