#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 r20967 = x;
        float r20968 = 1;
        float r20969 = r20967 + r20968;
        float r20970 = n;
        float r20971 = r20968 / r20970;
        float r20972 = pow(r20969, r20971);
        float r20973 = pow(r20967, r20971);
        float r20974 = r20972 - r20973;
        return r20974;
}

double f_id(double x, double n) {
        double r20975 = x;
        double r20976 = 1;
        double r20977 = r20975 + r20976;
        double r20978 = n;
        double r20979 = r20976 / r20978;
        double r20980 = pow(r20977, r20979);
        double r20981 = pow(r20975, r20979);
        double r20982 = r20980 - r20981;
        return r20982;
}


double f_of(float x, float n) {
        float r20983 = x;
        float r20984 = log1p(r20983);
        float r20985 = n;
        float r20986 = r20984 / r20985;
        float r20987 = expm1(r20986);
        float r20988 = log(r20983);
        float r20989 = r20988 / r20985;
        float r20990 = 1/2;
        float r20991 = r20985 / r20990;
        float r20992 = r20988 / r20991;
        float r20993 = fma(r20989, r20992, r20989);
        float r20994 = r20987 - r20993;
        float r20995 = -0.2065220245906004;
        bool r20996 = r20994 <= r20995;
        float r20997 = exp(r20986);
        float r20998 = 1;
        float r20999 = r20998 / r20985;
        float r21000 = pow(r20983, r20999);
        float r21001 = r20997 - r21000;
        float r21002 = -2.904235755037104e-270;
        bool r21003 = r20994 <= r21002;
        float r21004 = r20988 * r20999;
        float r21005 = fma(r20989, r20992, r21004);
        float r21006 = r20987 - r21005;
        float r21007 = 1.1564829395514594e-305;
        bool r21008 = r20994 <= r21007;
        float r21009 = r20988 / r20983;
        float r21010 = r20985 * r20985;
        float r21011 = r21009 / r21010;
        float r21012 = r20999 / r20983;
        float r21013 = r21011 + r21012;
        float r21014 = r20990 / r20985;
        float r21015 = r20983 * r20983;
        float r21016 = r21014 / r21015;
        float r21017 = r21013 - r21016;
        float r21018 = r21008 ? r21017 : r20994;
        float r21019 = r21003 ? r21006 : r21018;
        float r21020 = r20996 ? r21001 : r21019;
        return r21020;
}

double f_od(double x, double n) {
        double r21021 = x;
        double r21022 = log1p(r21021);
        double r21023 = n;
        double r21024 = r21022 / r21023;
        double r21025 = expm1(r21024);
        double r21026 = log(r21021);
        double r21027 = r21026 / r21023;
        double r21028 = 1/2;
        double r21029 = r21023 / r21028;
        double r21030 = r21026 / r21029;
        double r21031 = fma(r21027, r21030, r21027);
        double r21032 = r21025 - r21031;
        double r21033 = -0.2065220245906004;
        bool r21034 = r21032 <= r21033;
        double r21035 = exp(r21024);
        double r21036 = 1;
        double r21037 = r21036 / r21023;
        double r21038 = pow(r21021, r21037);
        double r21039 = r21035 - r21038;
        double r21040 = -2.904235755037104e-270;
        bool r21041 = r21032 <= r21040;
        double r21042 = r21026 * r21037;
        double r21043 = fma(r21027, r21030, r21042);
        double r21044 = r21025 - r21043;
        double r21045 = 1.1564829395514594e-305;
        bool r21046 = r21032 <= r21045;
        double r21047 = r21026 / r21021;
        double r21048 = r21023 * r21023;
        double r21049 = r21047 / r21048;
        double r21050 = r21037 / r21021;
        double r21051 = r21049 + r21050;
        double r21052 = r21028 / r21023;
        double r21053 = r21021 * r21021;
        double r21054 = r21052 / r21053;
        double r21055 = r21051 - r21054;
        double r21056 = r21046 ? r21055 : r21032;
        double r21057 = r21041 ? r21044 : r21056;
        double r21058 = r21034 ? r21039 : r21057;
        return r21058;
}

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 r21059, r21060, r21061, r21062, r21063, r21064, r21065, r21066;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r21059);
        mpfr_init_set_str(r21060, "1", 10, MPFR_RNDN);
        mpfr_init(r21061);
        mpfr_init(r21062);
        mpfr_init(r21063);
        mpfr_init(r21064);
        mpfr_init(r21065);
        mpfr_init(r21066);
}

double f_im(double x, double n) {
        mpfr_set_d(r21059, x, MPFR_RNDN);
        ;
        mpfr_add(r21061, r21059, r21060, MPFR_RNDN);
        mpfr_set_d(r21062, n, MPFR_RNDN);
        mpfr_div(r21063, r21060, r21062, MPFR_RNDN);
        mpfr_pow(r21064, r21061, r21063, MPFR_RNDN);
        mpfr_pow(r21065, r21059, r21063, MPFR_RNDN);
        mpfr_sub(r21066, r21064, r21065, MPFR_RNDN);
        return mpfr_get_d(r21066, MPFR_RNDN);
}

static mpfr_t r21067, r21068, r21069, r21070, r21071, r21072, r21073, r21074, r21075, r21076, r21077, r21078, r21079, r21080, r21081, r21082, r21083, r21084, r21085, r21086, r21087, r21088, r21089, r21090, r21091, r21092, r21093, r21094, r21095, r21096, r21097, r21098, r21099, r21100, r21101, r21102, r21103, r21104;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r21067);
        mpfr_init(r21068);
        mpfr_init(r21069);
        mpfr_init(r21070);
        mpfr_init(r21071);
        mpfr_init(r21072);
        mpfr_init(r21073);
        mpfr_init_set_str(r21074, "1/2", 10, MPFR_RNDN);
        mpfr_init(r21075);
        mpfr_init(r21076);
        mpfr_init(r21077);
        mpfr_init(r21078);
        mpfr_init_set_str(r21079, "-0.2065220245906004", 10, MPFR_RNDN);
        mpfr_init(r21080);
        mpfr_init(r21081);
        mpfr_init_set_str(r21082, "1", 10, MPFR_RNDN);
        mpfr_init(r21083);
        mpfr_init(r21084);
        mpfr_init(r21085);
        mpfr_init_set_str(r21086, "-2.904235755037104e-270", 10, MPFR_RNDN);
        mpfr_init(r21087);
        mpfr_init(r21088);
        mpfr_init(r21089);
        mpfr_init(r21090);
        mpfr_init_set_str(r21091, "1.1564829395514594e-305", 10, MPFR_RNDN);
        mpfr_init(r21092);
        mpfr_init(r21093);
        mpfr_init(r21094);
        mpfr_init(r21095);
        mpfr_init(r21096);
        mpfr_init(r21097);
        mpfr_init(r21098);
        mpfr_init(r21099);
        mpfr_init(r21100);
        mpfr_init(r21101);
        mpfr_init(r21102);
        mpfr_init(r21103);
        mpfr_init(r21104);
}

double f_fm(double x, double n) {
        mpfr_set_d(r21067, x, MPFR_RNDN);
        mpfr_log1p(r21068, r21067, MPFR_RNDN);
        mpfr_set_d(r21069, n, MPFR_RNDN);
        mpfr_div(r21070, r21068, r21069, MPFR_RNDN);
        mpfr_expm1(r21071, r21070, MPFR_RNDN);
        mpfr_log(r21072, r21067, MPFR_RNDN);
        mpfr_div(r21073, r21072, r21069, MPFR_RNDN);
        ;
        mpfr_div(r21075, r21069, r21074, MPFR_RNDN);
        mpfr_div(r21076, r21072, r21075, MPFR_RNDN);
        mpfr_fma(r21077, r21073, r21076, r21073, MPFR_RNDN);
        mpfr_sub(r21078, r21071, r21077, MPFR_RNDN);
        ;
        mpfr_set_si(r21080, mpfr_cmp(r21078, r21079) <= 0, MPFR_RNDN);
        mpfr_exp(r21081, r21070, MPFR_RNDN);
        ;
        mpfr_div(r21083, r21082, r21069, MPFR_RNDN);
        mpfr_pow(r21084, r21067, r21083, MPFR_RNDN);
        mpfr_sub(r21085, r21081, r21084, MPFR_RNDN);
        ;
        mpfr_set_si(r21087, mpfr_cmp(r21078, r21086) <= 0, MPFR_RNDN);
        mpfr_mul(r21088, r21072, r21083, MPFR_RNDN);
        mpfr_fma(r21089, r21073, r21076, r21088, MPFR_RNDN);
        mpfr_sub(r21090, r21071, r21089, MPFR_RNDN);
        ;
        mpfr_set_si(r21092, mpfr_cmp(r21078, r21091) <= 0, MPFR_RNDN);
        mpfr_div(r21093, r21072, r21067, MPFR_RNDN);
        mpfr_mul(r21094, r21069, r21069, MPFR_RNDN);
        mpfr_div(r21095, r21093, r21094, MPFR_RNDN);
        mpfr_div(r21096, r21083, r21067, MPFR_RNDN);
        mpfr_add(r21097, r21095, r21096, MPFR_RNDN);
        mpfr_div(r21098, r21074, r21069, MPFR_RNDN);
        mpfr_mul(r21099, r21067, r21067, MPFR_RNDN);
        mpfr_div(r21100, r21098, r21099, MPFR_RNDN);
        mpfr_sub(r21101, r21097, r21100, MPFR_RNDN);
        if (mpfr_get_si(r21092, MPFR_RNDN)) { mpfr_set(r21102, r21101, MPFR_RNDN); } else { mpfr_set(r21102, r21078, MPFR_RNDN); };
        if (mpfr_get_si(r21087, MPFR_RNDN)) { mpfr_set(r21103, r21090, MPFR_RNDN); } else { mpfr_set(r21103, r21102, MPFR_RNDN); };
        if (mpfr_get_si(r21080, MPFR_RNDN)) { mpfr_set(r21104, r21085, MPFR_RNDN); } else { mpfr_set(r21104, r21103, MPFR_RNDN); };
        return mpfr_get_d(r21104, MPFR_RNDN);
}

static mpfr_t r21105, r21106, r21107, r21108, r21109, r21110, r21111, r21112, r21113, r21114, r21115, r21116, r21117, r21118, r21119, r21120, r21121, r21122, r21123, r21124, r21125, r21126, r21127, r21128, r21129, r21130, r21131, r21132, r21133, r21134, r21135, r21136, r21137, r21138, r21139, r21140, r21141, r21142;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r21105);
        mpfr_init(r21106);
        mpfr_init(r21107);
        mpfr_init(r21108);
        mpfr_init(r21109);
        mpfr_init(r21110);
        mpfr_init(r21111);
        mpfr_init_set_str(r21112, "1/2", 10, MPFR_RNDN);
        mpfr_init(r21113);
        mpfr_init(r21114);
        mpfr_init(r21115);
        mpfr_init(r21116);
        mpfr_init_set_str(r21117, "-0.2065220245906004", 10, MPFR_RNDN);
        mpfr_init(r21118);
        mpfr_init(r21119);
        mpfr_init_set_str(r21120, "1", 10, MPFR_RNDN);
        mpfr_init(r21121);
        mpfr_init(r21122);
        mpfr_init(r21123);
        mpfr_init_set_str(r21124, "-2.904235755037104e-270", 10, MPFR_RNDN);
        mpfr_init(r21125);
        mpfr_init(r21126);
        mpfr_init(r21127);
        mpfr_init(r21128);
        mpfr_init_set_str(r21129, "1.1564829395514594e-305", 10, MPFR_RNDN);
        mpfr_init(r21130);
        mpfr_init(r21131);
        mpfr_init(r21132);
        mpfr_init(r21133);
        mpfr_init(r21134);
        mpfr_init(r21135);
        mpfr_init(r21136);
        mpfr_init(r21137);
        mpfr_init(r21138);
        mpfr_init(r21139);
        mpfr_init(r21140);
        mpfr_init(r21141);
        mpfr_init(r21142);
}

double f_dm(double x, double n) {
        mpfr_set_d(r21105, x, MPFR_RNDN);
        mpfr_log1p(r21106, r21105, MPFR_RNDN);
        mpfr_set_d(r21107, n, MPFR_RNDN);
        mpfr_div(r21108, r21106, r21107, MPFR_RNDN);
        mpfr_expm1(r21109, r21108, MPFR_RNDN);
        mpfr_log(r21110, r21105, MPFR_RNDN);
        mpfr_div(r21111, r21110, r21107, MPFR_RNDN);
        ;
        mpfr_div(r21113, r21107, r21112, MPFR_RNDN);
        mpfr_div(r21114, r21110, r21113, MPFR_RNDN);
        mpfr_fma(r21115, r21111, r21114, r21111, MPFR_RNDN);
        mpfr_sub(r21116, r21109, r21115, MPFR_RNDN);
        ;
        mpfr_set_si(r21118, mpfr_cmp(r21116, r21117) <= 0, MPFR_RNDN);
        mpfr_exp(r21119, r21108, MPFR_RNDN);
        ;
        mpfr_div(r21121, r21120, r21107, MPFR_RNDN);
        mpfr_pow(r21122, r21105, r21121, MPFR_RNDN);
        mpfr_sub(r21123, r21119, r21122, MPFR_RNDN);
        ;
        mpfr_set_si(r21125, mpfr_cmp(r21116, r21124) <= 0, MPFR_RNDN);
        mpfr_mul(r21126, r21110, r21121, MPFR_RNDN);
        mpfr_fma(r21127, r21111, r21114, r21126, MPFR_RNDN);
        mpfr_sub(r21128, r21109, r21127, MPFR_RNDN);
        ;
        mpfr_set_si(r21130, mpfr_cmp(r21116, r21129) <= 0, MPFR_RNDN);
        mpfr_div(r21131, r21110, r21105, MPFR_RNDN);
        mpfr_mul(r21132, r21107, r21107, MPFR_RNDN);
        mpfr_div(r21133, r21131, r21132, MPFR_RNDN);
        mpfr_div(r21134, r21121, r21105, MPFR_RNDN);
        mpfr_add(r21135, r21133, r21134, MPFR_RNDN);
        mpfr_div(r21136, r21112, r21107, MPFR_RNDN);
        mpfr_mul(r21137, r21105, r21105, MPFR_RNDN);
        mpfr_div(r21138, r21136, r21137, MPFR_RNDN);
        mpfr_sub(r21139, r21135, r21138, MPFR_RNDN);
        if (mpfr_get_si(r21130, MPFR_RNDN)) { mpfr_set(r21140, r21139, MPFR_RNDN); } else { mpfr_set(r21140, r21116, MPFR_RNDN); };
        if (mpfr_get_si(r21125, MPFR_RNDN)) { mpfr_set(r21141, r21128, MPFR_RNDN); } else { mpfr_set(r21141, r21140, MPFR_RNDN); };
        if (mpfr_get_si(r21118, MPFR_RNDN)) { mpfr_set(r21142, r21123, MPFR_RNDN); } else { mpfr_set(r21142, r21141, MPFR_RNDN); };
        return mpfr_get_d(r21142, MPFR_RNDN);
}

