#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 r36982 = x;
        float r36983 = 1;
        float r36984 = r36982 + r36983;
        float r36985 = n;
        float r36986 = r36983 / r36985;
        float r36987 = pow(r36984, r36986);
        float r36988 = pow(r36982, r36986);
        float r36989 = r36987 - r36988;
        return r36989;
}

double f_id(double x, double n) {
        double r36990 = x;
        double r36991 = 1;
        double r36992 = r36990 + r36991;
        double r36993 = n;
        double r36994 = r36991 / r36993;
        double r36995 = pow(r36992, r36994);
        double r36996 = pow(r36990, r36994);
        double r36997 = r36995 - r36996;
        return r36997;
}


double f_of(float x, float n) {
        float r36998 = n;
        float r36999 = -16217293.129781114;
        bool r37000 = r36998 <= r36999;
        float r37001 = 1;
        float r37002 = x;
        float r37003 = r37001 / r37002;
        float r37004 = r37003 / r36998;
        float r37005 = 1/2;
        float r37006 = r37005 / r36998;
        float r37007 = r37002 * r37002;
        float r37008 = r37006 / r37007;
        float r37009 = r37004 - r37008;
        float r37010 = log(r37002);
        float r37011 = r36998 * r36998;
        float r37012 = r37010 / r37011;
        float r37013 = r37012 / r37002;
        float r37014 = r37009 - r37013;
        float r37015 = 698268857478.727;
        bool r37016 = r36998 <= r37015;
        float r37017 = r37002 + r37001;
        float r37018 = r37001 / r36998;
        float r37019 = pow(r37017, r37018);
        float r37020 = pow(r37002, r37018);
        float r37021 = r37019 - r37020;
        float r37022 = exp(r37021);
        float r37023 = log(r37022);
        float r37024 = 3;
        float r37025 = pow(r37023, r37024);
        float r37026 = cbrt(r37025);
        float r37027 = r37016 ? r37026 : r37014;
        float r37028 = r37000 ? r37014 : r37027;
        return r37028;
}

double f_od(double x, double n) {
        double r37029 = n;
        double r37030 = -16217293.129781114;
        bool r37031 = r37029 <= r37030;
        double r37032 = 1;
        double r37033 = x;
        double r37034 = r37032 / r37033;
        double r37035 = r37034 / r37029;
        double r37036 = 1/2;
        double r37037 = r37036 / r37029;
        double r37038 = r37033 * r37033;
        double r37039 = r37037 / r37038;
        double r37040 = r37035 - r37039;
        double r37041 = log(r37033);
        double r37042 = r37029 * r37029;
        double r37043 = r37041 / r37042;
        double r37044 = r37043 / r37033;
        double r37045 = r37040 - r37044;
        double r37046 = 698268857478.727;
        bool r37047 = r37029 <= r37046;
        double r37048 = r37033 + r37032;
        double r37049 = r37032 / r37029;
        double r37050 = pow(r37048, r37049);
        double r37051 = pow(r37033, r37049);
        double r37052 = r37050 - r37051;
        double r37053 = exp(r37052);
        double r37054 = log(r37053);
        double r37055 = 3;
        double r37056 = pow(r37054, r37055);
        double r37057 = cbrt(r37056);
        double r37058 = r37047 ? r37057 : r37045;
        double r37059 = r37031 ? r37045 : r37058;
        return r37059;
}

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 r37060, r37061, r37062, r37063, r37064, r37065, r37066, r37067;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37060);
        mpfr_init_set_str(r37061, "1", 10, MPFR_RNDN);
        mpfr_init(r37062);
        mpfr_init(r37063);
        mpfr_init(r37064);
        mpfr_init(r37065);
        mpfr_init(r37066);
        mpfr_init(r37067);
}

double f_im(double x, double n) {
        mpfr_set_d(r37060, x, MPFR_RNDN);
        ;
        mpfr_add(r37062, r37060, r37061, MPFR_RNDN);
        mpfr_set_d(r37063, n, MPFR_RNDN);
        mpfr_div(r37064, r37061, r37063, MPFR_RNDN);
        mpfr_pow(r37065, r37062, r37064, MPFR_RNDN);
        mpfr_pow(r37066, r37060, r37064, MPFR_RNDN);
        mpfr_sub(r37067, r37065, r37066, MPFR_RNDN);
        return mpfr_get_d(r37067, MPFR_RNDN);
}

static mpfr_t r37068, r37069, r37070, r37071, r37072, r37073, r37074, r37075, r37076, r37077, r37078, r37079, r37080, r37081, r37082, r37083, r37084, r37085, r37086, r37087, r37088, r37089, r37090, r37091, r37092, r37093, r37094, r37095, r37096, r37097, r37098;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37068);
        mpfr_init_set_str(r37069, "-16217293.129781114", 10, MPFR_RNDN);
        mpfr_init(r37070);
        mpfr_init_set_str(r37071, "1", 10, MPFR_RNDN);
        mpfr_init(r37072);
        mpfr_init(r37073);
        mpfr_init(r37074);
        mpfr_init_set_str(r37075, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37076);
        mpfr_init(r37077);
        mpfr_init(r37078);
        mpfr_init(r37079);
        mpfr_init(r37080);
        mpfr_init(r37081);
        mpfr_init(r37082);
        mpfr_init(r37083);
        mpfr_init(r37084);
        mpfr_init_set_str(r37085, "698268857478.727", 10, MPFR_RNDN);
        mpfr_init(r37086);
        mpfr_init(r37087);
        mpfr_init(r37088);
        mpfr_init(r37089);
        mpfr_init(r37090);
        mpfr_init(r37091);
        mpfr_init(r37092);
        mpfr_init(r37093);
        mpfr_init_set_str(r37094, "3", 10, MPFR_RNDN);
        mpfr_init(r37095);
        mpfr_init(r37096);
        mpfr_init(r37097);
        mpfr_init(r37098);
}

double f_fm(double x, double n) {
        mpfr_set_d(r37068, n, MPFR_RNDN);
        ;
        mpfr_set_si(r37070, mpfr_cmp(r37068, r37069) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r37072, x, MPFR_RNDN);
        mpfr_div(r37073, r37071, r37072, MPFR_RNDN);
        mpfr_div(r37074, r37073, r37068, MPFR_RNDN);
        ;
        mpfr_div(r37076, r37075, r37068, MPFR_RNDN);
        mpfr_mul(r37077, r37072, r37072, MPFR_RNDN);
        mpfr_div(r37078, r37076, r37077, MPFR_RNDN);
        mpfr_sub(r37079, r37074, r37078, MPFR_RNDN);
        mpfr_log(r37080, r37072, MPFR_RNDN);
        mpfr_mul(r37081, r37068, r37068, MPFR_RNDN);
        mpfr_div(r37082, r37080, r37081, MPFR_RNDN);
        mpfr_div(r37083, r37082, r37072, MPFR_RNDN);
        mpfr_sub(r37084, r37079, r37083, MPFR_RNDN);
        ;
        mpfr_set_si(r37086, mpfr_cmp(r37068, r37085) <= 0, MPFR_RNDN);
        mpfr_add(r37087, r37072, r37071, MPFR_RNDN);
        mpfr_div(r37088, r37071, r37068, MPFR_RNDN);
        mpfr_pow(r37089, r37087, r37088, MPFR_RNDN);
        mpfr_pow(r37090, r37072, r37088, MPFR_RNDN);
        mpfr_sub(r37091, r37089, r37090, MPFR_RNDN);
        mpfr_exp(r37092, r37091, MPFR_RNDN);
        mpfr_log(r37093, r37092, MPFR_RNDN);
        ;
        mpfr_pow(r37095, r37093, r37094, MPFR_RNDN);
        mpfr_cbrt(r37096, r37095, MPFR_RNDN);
        if (mpfr_get_si(r37086, MPFR_RNDN)) { mpfr_set(r37097, r37096, MPFR_RNDN); } else { mpfr_set(r37097, r37084, MPFR_RNDN); };
        if (mpfr_get_si(r37070, MPFR_RNDN)) { mpfr_set(r37098, r37084, MPFR_RNDN); } else { mpfr_set(r37098, r37097, MPFR_RNDN); };
        return mpfr_get_d(r37098, MPFR_RNDN);
}

static mpfr_t r37099, r37100, r37101, r37102, r37103, r37104, r37105, r37106, r37107, r37108, r37109, r37110, r37111, r37112, r37113, r37114, r37115, r37116, r37117, r37118, r37119, r37120, r37121, r37122, r37123, r37124, r37125, r37126, r37127, r37128, r37129;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37099);
        mpfr_init_set_str(r37100, "-16217293.129781114", 10, MPFR_RNDN);
        mpfr_init(r37101);
        mpfr_init_set_str(r37102, "1", 10, MPFR_RNDN);
        mpfr_init(r37103);
        mpfr_init(r37104);
        mpfr_init(r37105);
        mpfr_init_set_str(r37106, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37107);
        mpfr_init(r37108);
        mpfr_init(r37109);
        mpfr_init(r37110);
        mpfr_init(r37111);
        mpfr_init(r37112);
        mpfr_init(r37113);
        mpfr_init(r37114);
        mpfr_init(r37115);
        mpfr_init_set_str(r37116, "698268857478.727", 10, MPFR_RNDN);
        mpfr_init(r37117);
        mpfr_init(r37118);
        mpfr_init(r37119);
        mpfr_init(r37120);
        mpfr_init(r37121);
        mpfr_init(r37122);
        mpfr_init(r37123);
        mpfr_init(r37124);
        mpfr_init_set_str(r37125, "3", 10, MPFR_RNDN);
        mpfr_init(r37126);
        mpfr_init(r37127);
        mpfr_init(r37128);
        mpfr_init(r37129);
}

double f_dm(double x, double n) {
        mpfr_set_d(r37099, n, MPFR_RNDN);
        ;
        mpfr_set_si(r37101, mpfr_cmp(r37099, r37100) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r37103, x, MPFR_RNDN);
        mpfr_div(r37104, r37102, r37103, MPFR_RNDN);
        mpfr_div(r37105, r37104, r37099, MPFR_RNDN);
        ;
        mpfr_div(r37107, r37106, r37099, MPFR_RNDN);
        mpfr_mul(r37108, r37103, r37103, MPFR_RNDN);
        mpfr_div(r37109, r37107, r37108, MPFR_RNDN);
        mpfr_sub(r37110, r37105, r37109, MPFR_RNDN);
        mpfr_log(r37111, r37103, MPFR_RNDN);
        mpfr_mul(r37112, r37099, r37099, MPFR_RNDN);
        mpfr_div(r37113, r37111, r37112, MPFR_RNDN);
        mpfr_div(r37114, r37113, r37103, MPFR_RNDN);
        mpfr_sub(r37115, r37110, r37114, MPFR_RNDN);
        ;
        mpfr_set_si(r37117, mpfr_cmp(r37099, r37116) <= 0, MPFR_RNDN);
        mpfr_add(r37118, r37103, r37102, MPFR_RNDN);
        mpfr_div(r37119, r37102, r37099, MPFR_RNDN);
        mpfr_pow(r37120, r37118, r37119, MPFR_RNDN);
        mpfr_pow(r37121, r37103, r37119, MPFR_RNDN);
        mpfr_sub(r37122, r37120, r37121, MPFR_RNDN);
        mpfr_exp(r37123, r37122, MPFR_RNDN);
        mpfr_log(r37124, r37123, MPFR_RNDN);
        ;
        mpfr_pow(r37126, r37124, r37125, MPFR_RNDN);
        mpfr_cbrt(r37127, r37126, MPFR_RNDN);
        if (mpfr_get_si(r37117, MPFR_RNDN)) { mpfr_set(r37128, r37127, MPFR_RNDN); } else { mpfr_set(r37128, r37115, MPFR_RNDN); };
        if (mpfr_get_si(r37101, MPFR_RNDN)) { mpfr_set(r37129, r37115, MPFR_RNDN); } else { mpfr_set(r37129, r37128, MPFR_RNDN); };
        return mpfr_get_d(r37129, MPFR_RNDN);
}

