#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 r37162 = x;
        float r37163 = 1;
        float r37164 = r37162 + r37163;
        float r37165 = n;
        float r37166 = r37163 / r37165;
        float r37167 = pow(r37164, r37166);
        float r37168 = pow(r37162, r37166);
        float r37169 = r37167 - r37168;
        return r37169;
}

double f_id(double x, double n) {
        double r37170 = x;
        double r37171 = 1;
        double r37172 = r37170 + r37171;
        double r37173 = n;
        double r37174 = r37171 / r37173;
        double r37175 = pow(r37172, r37174);
        double r37176 = pow(r37170, r37174);
        double r37177 = r37175 - r37176;
        return r37177;
}


double f_of(float x, float n) {
        float r37178 = n;
        float r37179 = -316.6254307243247;
        bool r37180 = r37178 <= r37179;
        float r37181 = 1;
        float r37182 = x;
        float r37183 = r37182 * r37178;
        float r37184 = r37181 / r37183;
        float r37185 = 1/2;
        float r37186 = r37185 / r37182;
        float r37187 = r37186 / r37183;
        float r37188 = r37184 - r37187;
        float r37189 = log(r37182);
        float r37190 = r37189 / r37178;
        float r37191 = r37190 / r37183;
        float r37192 = r37188 - r37191;
        float r37193 = 1474036971039.3018;
        bool r37194 = r37178 <= r37193;
        float r37195 = r37182 + r37181;
        float r37196 = r37181 / r37178;
        float r37197 = pow(r37195, r37196);
        float r37198 = exp(r37190);
        float r37199 = r37197 - r37198;
        float r37200 = r37194 ? r37199 : r37192;
        float r37201 = r37180 ? r37192 : r37200;
        return r37201;
}

double f_od(double x, double n) {
        double r37202 = n;
        double r37203 = -316.6254307243247;
        bool r37204 = r37202 <= r37203;
        double r37205 = 1;
        double r37206 = x;
        double r37207 = r37206 * r37202;
        double r37208 = r37205 / r37207;
        double r37209 = 1/2;
        double r37210 = r37209 / r37206;
        double r37211 = r37210 / r37207;
        double r37212 = r37208 - r37211;
        double r37213 = log(r37206);
        double r37214 = r37213 / r37202;
        double r37215 = r37214 / r37207;
        double r37216 = r37212 - r37215;
        double r37217 = 1474036971039.3018;
        bool r37218 = r37202 <= r37217;
        double r37219 = r37206 + r37205;
        double r37220 = r37205 / r37202;
        double r37221 = pow(r37219, r37220);
        double r37222 = exp(r37214);
        double r37223 = r37221 - r37222;
        double r37224 = r37218 ? r37223 : r37216;
        double r37225 = r37204 ? r37216 : r37224;
        return r37225;
}

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 r37226, r37227, r37228, r37229, r37230, r37231, r37232, r37233;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37226);
        mpfr_init_set_str(r37227, "1", 10, MPFR_RNDN);
        mpfr_init(r37228);
        mpfr_init(r37229);
        mpfr_init(r37230);
        mpfr_init(r37231);
        mpfr_init(r37232);
        mpfr_init(r37233);
}

double f_im(double x, double n) {
        mpfr_set_d(r37226, x, MPFR_RNDN);
        ;
        mpfr_add(r37228, r37226, r37227, MPFR_RNDN);
        mpfr_set_d(r37229, n, MPFR_RNDN);
        mpfr_div(r37230, r37227, r37229, MPFR_RNDN);
        mpfr_pow(r37231, r37228, r37230, MPFR_RNDN);
        mpfr_pow(r37232, r37226, r37230, MPFR_RNDN);
        mpfr_sub(r37233, r37231, r37232, MPFR_RNDN);
        return mpfr_get_d(r37233, MPFR_RNDN);
}

static mpfr_t r37234, r37235, r37236, r37237, r37238, r37239, r37240, r37241, r37242, r37243, r37244, r37245, r37246, r37247, r37248, r37249, r37250, r37251, r37252, r37253, r37254, r37255, r37256, r37257;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37234);
        mpfr_init_set_str(r37235, "-316.6254307243247", 10, MPFR_RNDN);
        mpfr_init(r37236);
        mpfr_init_set_str(r37237, "1", 10, MPFR_RNDN);
        mpfr_init(r37238);
        mpfr_init(r37239);
        mpfr_init(r37240);
        mpfr_init_set_str(r37241, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37242);
        mpfr_init(r37243);
        mpfr_init(r37244);
        mpfr_init(r37245);
        mpfr_init(r37246);
        mpfr_init(r37247);
        mpfr_init(r37248);
        mpfr_init_set_str(r37249, "1474036971039.3018", 10, MPFR_RNDN);
        mpfr_init(r37250);
        mpfr_init(r37251);
        mpfr_init(r37252);
        mpfr_init(r37253);
        mpfr_init(r37254);
        mpfr_init(r37255);
        mpfr_init(r37256);
        mpfr_init(r37257);
}

double f_fm(double x, double n) {
        mpfr_set_d(r37234, n, MPFR_RNDN);
        ;
        mpfr_set_si(r37236, mpfr_cmp(r37234, r37235) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r37238, x, MPFR_RNDN);
        mpfr_mul(r37239, r37238, r37234, MPFR_RNDN);
        mpfr_div(r37240, r37237, r37239, MPFR_RNDN);
        ;
        mpfr_div(r37242, r37241, r37238, MPFR_RNDN);
        mpfr_div(r37243, r37242, r37239, MPFR_RNDN);
        mpfr_sub(r37244, r37240, r37243, MPFR_RNDN);
        mpfr_log(r37245, r37238, MPFR_RNDN);
        mpfr_div(r37246, r37245, r37234, MPFR_RNDN);
        mpfr_div(r37247, r37246, r37239, MPFR_RNDN);
        mpfr_sub(r37248, r37244, r37247, MPFR_RNDN);
        ;
        mpfr_set_si(r37250, mpfr_cmp(r37234, r37249) <= 0, MPFR_RNDN);
        mpfr_add(r37251, r37238, r37237, MPFR_RNDN);
        mpfr_div(r37252, r37237, r37234, MPFR_RNDN);
        mpfr_pow(r37253, r37251, r37252, MPFR_RNDN);
        mpfr_exp(r37254, r37246, MPFR_RNDN);
        mpfr_sub(r37255, r37253, r37254, MPFR_RNDN);
        if (mpfr_get_si(r37250, MPFR_RNDN)) { mpfr_set(r37256, r37255, MPFR_RNDN); } else { mpfr_set(r37256, r37248, MPFR_RNDN); };
        if (mpfr_get_si(r37236, MPFR_RNDN)) { mpfr_set(r37257, r37248, MPFR_RNDN); } else { mpfr_set(r37257, r37256, MPFR_RNDN); };
        return mpfr_get_d(r37257, MPFR_RNDN);
}

static mpfr_t r37258, r37259, r37260, r37261, r37262, r37263, r37264, r37265, r37266, r37267, r37268, r37269, r37270, r37271, r37272, r37273, r37274, r37275, r37276, r37277, r37278, r37279, r37280, r37281;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37258);
        mpfr_init_set_str(r37259, "-316.6254307243247", 10, MPFR_RNDN);
        mpfr_init(r37260);
        mpfr_init_set_str(r37261, "1", 10, MPFR_RNDN);
        mpfr_init(r37262);
        mpfr_init(r37263);
        mpfr_init(r37264);
        mpfr_init_set_str(r37265, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37266);
        mpfr_init(r37267);
        mpfr_init(r37268);
        mpfr_init(r37269);
        mpfr_init(r37270);
        mpfr_init(r37271);
        mpfr_init(r37272);
        mpfr_init_set_str(r37273, "1474036971039.3018", 10, MPFR_RNDN);
        mpfr_init(r37274);
        mpfr_init(r37275);
        mpfr_init(r37276);
        mpfr_init(r37277);
        mpfr_init(r37278);
        mpfr_init(r37279);
        mpfr_init(r37280);
        mpfr_init(r37281);
}

double f_dm(double x, double n) {
        mpfr_set_d(r37258, n, MPFR_RNDN);
        ;
        mpfr_set_si(r37260, mpfr_cmp(r37258, r37259) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r37262, x, MPFR_RNDN);
        mpfr_mul(r37263, r37262, r37258, MPFR_RNDN);
        mpfr_div(r37264, r37261, r37263, MPFR_RNDN);
        ;
        mpfr_div(r37266, r37265, r37262, MPFR_RNDN);
        mpfr_div(r37267, r37266, r37263, MPFR_RNDN);
        mpfr_sub(r37268, r37264, r37267, MPFR_RNDN);
        mpfr_log(r37269, r37262, MPFR_RNDN);
        mpfr_div(r37270, r37269, r37258, MPFR_RNDN);
        mpfr_div(r37271, r37270, r37263, MPFR_RNDN);
        mpfr_sub(r37272, r37268, r37271, MPFR_RNDN);
        ;
        mpfr_set_si(r37274, mpfr_cmp(r37258, r37273) <= 0, MPFR_RNDN);
        mpfr_add(r37275, r37262, r37261, MPFR_RNDN);
        mpfr_div(r37276, r37261, r37258, MPFR_RNDN);
        mpfr_pow(r37277, r37275, r37276, MPFR_RNDN);
        mpfr_exp(r37278, r37270, MPFR_RNDN);
        mpfr_sub(r37279, r37277, r37278, MPFR_RNDN);
        if (mpfr_get_si(r37274, MPFR_RNDN)) { mpfr_set(r37280, r37279, MPFR_RNDN); } else { mpfr_set(r37280, r37272, MPFR_RNDN); };
        if (mpfr_get_si(r37260, MPFR_RNDN)) { mpfr_set(r37281, r37272, MPFR_RNDN); } else { mpfr_set(r37281, r37280, MPFR_RNDN); };
        return mpfr_get_d(r37281, MPFR_RNDN);
}

