#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 r20991 = x;
        float r20992 = 1;
        float r20993 = r20991 + r20992;
        float r20994 = n;
        float r20995 = r20992 / r20994;
        float r20996 = pow(r20993, r20995);
        float r20997 = pow(r20991, r20995);
        float r20998 = r20996 - r20997;
        return r20998;
}

double f_id(double x, double n) {
        double r20999 = x;
        double r21000 = 1;
        double r21001 = r20999 + r21000;
        double r21002 = n;
        double r21003 = r21000 / r21002;
        double r21004 = pow(r21001, r21003);
        double r21005 = pow(r20999, r21003);
        double r21006 = r21004 - r21005;
        return r21006;
}


double f_of(float x, float n) {
        float r21007 = x;
        float r21008 = log1p(r21007);
        float r21009 = n;
        float r21010 = r21008 / r21009;
        float r21011 = expm1(r21010);
        float r21012 = log(r21007);
        float r21013 = r21012 / r21009;
        float r21014 = 1/2;
        float r21015 = r21009 / r21014;
        float r21016 = r21012 / r21015;
        float r21017 = fma(r21013, r21016, r21013);
        float r21018 = r21011 - r21017;
        float r21019 = -4.077242954010901e-11;
        bool r21020 = r21018 <= r21019;
        float r21021 = 1;
        float r21022 = r21021 + r21007;
        float r21023 = r21021 / r21009;
        float r21024 = pow(r21022, r21023);
        float r21025 = pow(r21007, r21023);
        float r21026 = r21024 - r21025;
        float r21027 = exp(r21026);
        float r21028 = log(r21027);
        float r21029 = -4.537988372558897e-303;
        bool r21030 = r21018 <= r21029;
        float r21031 = 2.0698243416009064e-287;
        bool r21032 = r21018 <= r21031;
        float r21033 = log(r21021);
        float r21034 = r21012 / r21007;
        float r21035 = r21009 * r21009;
        float r21036 = r21034 / r21035;
        float r21037 = r21033 + r21036;
        float r21038 = r21014 / r21009;
        float r21039 = r21007 * r21007;
        float r21040 = r21038 / r21039;
        float r21041 = r21023 / r21007;
        float r21042 = r21040 - r21041;
        float r21043 = r21037 - r21042;
        float r21044 = r21032 ? r21043 : r21018;
        float r21045 = r21030 ? r21018 : r21044;
        float r21046 = r21020 ? r21028 : r21045;
        return r21046;
}

double f_od(double x, double n) {
        double r21047 = x;
        double r21048 = log1p(r21047);
        double r21049 = n;
        double r21050 = r21048 / r21049;
        double r21051 = expm1(r21050);
        double r21052 = log(r21047);
        double r21053 = r21052 / r21049;
        double r21054 = 1/2;
        double r21055 = r21049 / r21054;
        double r21056 = r21052 / r21055;
        double r21057 = fma(r21053, r21056, r21053);
        double r21058 = r21051 - r21057;
        double r21059 = -4.077242954010901e-11;
        bool r21060 = r21058 <= r21059;
        double r21061 = 1;
        double r21062 = r21061 + r21047;
        double r21063 = r21061 / r21049;
        double r21064 = pow(r21062, r21063);
        double r21065 = pow(r21047, r21063);
        double r21066 = r21064 - r21065;
        double r21067 = exp(r21066);
        double r21068 = log(r21067);
        double r21069 = -4.537988372558897e-303;
        bool r21070 = r21058 <= r21069;
        double r21071 = 2.0698243416009064e-287;
        bool r21072 = r21058 <= r21071;
        double r21073 = log(r21061);
        double r21074 = r21052 / r21047;
        double r21075 = r21049 * r21049;
        double r21076 = r21074 / r21075;
        double r21077 = r21073 + r21076;
        double r21078 = r21054 / r21049;
        double r21079 = r21047 * r21047;
        double r21080 = r21078 / r21079;
        double r21081 = r21063 / r21047;
        double r21082 = r21080 - r21081;
        double r21083 = r21077 - r21082;
        double r21084 = r21072 ? r21083 : r21058;
        double r21085 = r21070 ? r21058 : r21084;
        double r21086 = r21060 ? r21068 : r21085;
        return r21086;
}

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 r21087, r21088, r21089, r21090, r21091, r21092, r21093, r21094;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r21087);
        mpfr_init_set_str(r21088, "1", 10, MPFR_RNDN);
        mpfr_init(r21089);
        mpfr_init(r21090);
        mpfr_init(r21091);
        mpfr_init(r21092);
        mpfr_init(r21093);
        mpfr_init(r21094);
}

double f_im(double x, double n) {
        mpfr_set_d(r21087, x, MPFR_RNDN);
        ;
        mpfr_add(r21089, r21087, r21088, MPFR_RNDN);
        mpfr_set_d(r21090, n, MPFR_RNDN);
        mpfr_div(r21091, r21088, r21090, MPFR_RNDN);
        mpfr_pow(r21092, r21089, r21091, MPFR_RNDN);
        mpfr_pow(r21093, r21087, r21091, MPFR_RNDN);
        mpfr_sub(r21094, r21092, r21093, MPFR_RNDN);
        return mpfr_get_d(r21094, MPFR_RNDN);
}

static mpfr_t r21095, r21096, r21097, r21098, r21099, r21100, r21101, r21102, r21103, r21104, 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;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r21095);
        mpfr_init(r21096);
        mpfr_init(r21097);
        mpfr_init(r21098);
        mpfr_init(r21099);
        mpfr_init(r21100);
        mpfr_init(r21101);
        mpfr_init_set_str(r21102, "1/2", 10, MPFR_RNDN);
        mpfr_init(r21103);
        mpfr_init(r21104);
        mpfr_init(r21105);
        mpfr_init(r21106);
        mpfr_init_set_str(r21107, "-4.077242954010901e-11", 10, MPFR_RNDN);
        mpfr_init(r21108);
        mpfr_init_set_str(r21109, "1", 10, MPFR_RNDN);
        mpfr_init(r21110);
        mpfr_init(r21111);
        mpfr_init(r21112);
        mpfr_init(r21113);
        mpfr_init(r21114);
        mpfr_init(r21115);
        mpfr_init(r21116);
        mpfr_init_set_str(r21117, "-4.537988372558897e-303", 10, MPFR_RNDN);
        mpfr_init(r21118);
        mpfr_init_set_str(r21119, "2.0698243416009064e-287", 10, MPFR_RNDN);
        mpfr_init(r21120);
        mpfr_init(r21121);
        mpfr_init(r21122);
        mpfr_init(r21123);
        mpfr_init(r21124);
        mpfr_init(r21125);
        mpfr_init(r21126);
        mpfr_init(r21127);
        mpfr_init(r21128);
        mpfr_init(r21129);
        mpfr_init(r21130);
        mpfr_init(r21131);
        mpfr_init(r21132);
        mpfr_init(r21133);
        mpfr_init(r21134);
}

double f_fm(double x, double n) {
        mpfr_set_d(r21095, x, MPFR_RNDN);
        mpfr_log1p(r21096, r21095, MPFR_RNDN);
        mpfr_set_d(r21097, n, MPFR_RNDN);
        mpfr_div(r21098, r21096, r21097, MPFR_RNDN);
        mpfr_expm1(r21099, r21098, MPFR_RNDN);
        mpfr_log(r21100, r21095, MPFR_RNDN);
        mpfr_div(r21101, r21100, r21097, MPFR_RNDN);
        ;
        mpfr_div(r21103, r21097, r21102, MPFR_RNDN);
        mpfr_div(r21104, r21100, r21103, MPFR_RNDN);
        mpfr_fma(r21105, r21101, r21104, r21101, MPFR_RNDN);
        mpfr_sub(r21106, r21099, r21105, MPFR_RNDN);
        ;
        mpfr_set_si(r21108, mpfr_cmp(r21106, r21107) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r21110, r21109, r21095, MPFR_RNDN);
        mpfr_div(r21111, r21109, r21097, MPFR_RNDN);
        mpfr_pow(r21112, r21110, r21111, MPFR_RNDN);
        mpfr_pow(r21113, r21095, r21111, MPFR_RNDN);
        mpfr_sub(r21114, r21112, r21113, MPFR_RNDN);
        mpfr_exp(r21115, r21114, MPFR_RNDN);
        mpfr_log(r21116, r21115, MPFR_RNDN);
        ;
        mpfr_set_si(r21118, mpfr_cmp(r21106, r21117) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r21120, mpfr_cmp(r21106, r21119) <= 0, MPFR_RNDN);
        mpfr_log(r21121, r21109, MPFR_RNDN);
        mpfr_div(r21122, r21100, r21095, MPFR_RNDN);
        mpfr_mul(r21123, r21097, r21097, MPFR_RNDN);
        mpfr_div(r21124, r21122, r21123, MPFR_RNDN);
        mpfr_add(r21125, r21121, r21124, MPFR_RNDN);
        mpfr_div(r21126, r21102, r21097, MPFR_RNDN);
        mpfr_mul(r21127, r21095, r21095, MPFR_RNDN);
        mpfr_div(r21128, r21126, r21127, MPFR_RNDN);
        mpfr_div(r21129, r21111, r21095, MPFR_RNDN);
        mpfr_sub(r21130, r21128, r21129, MPFR_RNDN);
        mpfr_sub(r21131, r21125, r21130, MPFR_RNDN);
        if (mpfr_get_si(r21120, MPFR_RNDN)) { mpfr_set(r21132, r21131, MPFR_RNDN); } else { mpfr_set(r21132, r21106, MPFR_RNDN); };
        if (mpfr_get_si(r21118, MPFR_RNDN)) { mpfr_set(r21133, r21106, MPFR_RNDN); } else { mpfr_set(r21133, r21132, MPFR_RNDN); };
        if (mpfr_get_si(r21108, MPFR_RNDN)) { mpfr_set(r21134, r21116, MPFR_RNDN); } else { mpfr_set(r21134, r21133, MPFR_RNDN); };
        return mpfr_get_d(r21134, MPFR_RNDN);
}

static mpfr_t r21135, r21136, r21137, r21138, r21139, r21140, r21141, r21142, r21143, r21144, r21145, r21146, r21147, r21148, r21149, r21150, r21151, r21152, r21153, r21154, r21155, r21156, r21157, r21158, r21159, r21160, r21161, r21162, r21163, r21164, r21165, r21166, r21167, r21168, r21169, r21170, r21171, r21172, r21173, r21174;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r21135);
        mpfr_init(r21136);
        mpfr_init(r21137);
        mpfr_init(r21138);
        mpfr_init(r21139);
        mpfr_init(r21140);
        mpfr_init(r21141);
        mpfr_init_set_str(r21142, "1/2", 10, MPFR_RNDN);
        mpfr_init(r21143);
        mpfr_init(r21144);
        mpfr_init(r21145);
        mpfr_init(r21146);
        mpfr_init_set_str(r21147, "-4.077242954010901e-11", 10, MPFR_RNDN);
        mpfr_init(r21148);
        mpfr_init_set_str(r21149, "1", 10, MPFR_RNDN);
        mpfr_init(r21150);
        mpfr_init(r21151);
        mpfr_init(r21152);
        mpfr_init(r21153);
        mpfr_init(r21154);
        mpfr_init(r21155);
        mpfr_init(r21156);
        mpfr_init_set_str(r21157, "-4.537988372558897e-303", 10, MPFR_RNDN);
        mpfr_init(r21158);
        mpfr_init_set_str(r21159, "2.0698243416009064e-287", 10, MPFR_RNDN);
        mpfr_init(r21160);
        mpfr_init(r21161);
        mpfr_init(r21162);
        mpfr_init(r21163);
        mpfr_init(r21164);
        mpfr_init(r21165);
        mpfr_init(r21166);
        mpfr_init(r21167);
        mpfr_init(r21168);
        mpfr_init(r21169);
        mpfr_init(r21170);
        mpfr_init(r21171);
        mpfr_init(r21172);
        mpfr_init(r21173);
        mpfr_init(r21174);
}

double f_dm(double x, double n) {
        mpfr_set_d(r21135, x, MPFR_RNDN);
        mpfr_log1p(r21136, r21135, MPFR_RNDN);
        mpfr_set_d(r21137, n, MPFR_RNDN);
        mpfr_div(r21138, r21136, r21137, MPFR_RNDN);
        mpfr_expm1(r21139, r21138, MPFR_RNDN);
        mpfr_log(r21140, r21135, MPFR_RNDN);
        mpfr_div(r21141, r21140, r21137, MPFR_RNDN);
        ;
        mpfr_div(r21143, r21137, r21142, MPFR_RNDN);
        mpfr_div(r21144, r21140, r21143, MPFR_RNDN);
        mpfr_fma(r21145, r21141, r21144, r21141, MPFR_RNDN);
        mpfr_sub(r21146, r21139, r21145, MPFR_RNDN);
        ;
        mpfr_set_si(r21148, mpfr_cmp(r21146, r21147) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r21150, r21149, r21135, MPFR_RNDN);
        mpfr_div(r21151, r21149, r21137, MPFR_RNDN);
        mpfr_pow(r21152, r21150, r21151, MPFR_RNDN);
        mpfr_pow(r21153, r21135, r21151, MPFR_RNDN);
        mpfr_sub(r21154, r21152, r21153, MPFR_RNDN);
        mpfr_exp(r21155, r21154, MPFR_RNDN);
        mpfr_log(r21156, r21155, MPFR_RNDN);
        ;
        mpfr_set_si(r21158, mpfr_cmp(r21146, r21157) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r21160, mpfr_cmp(r21146, r21159) <= 0, MPFR_RNDN);
        mpfr_log(r21161, r21149, MPFR_RNDN);
        mpfr_div(r21162, r21140, r21135, MPFR_RNDN);
        mpfr_mul(r21163, r21137, r21137, MPFR_RNDN);
        mpfr_div(r21164, r21162, r21163, MPFR_RNDN);
        mpfr_add(r21165, r21161, r21164, MPFR_RNDN);
        mpfr_div(r21166, r21142, r21137, MPFR_RNDN);
        mpfr_mul(r21167, r21135, r21135, MPFR_RNDN);
        mpfr_div(r21168, r21166, r21167, MPFR_RNDN);
        mpfr_div(r21169, r21151, r21135, MPFR_RNDN);
        mpfr_sub(r21170, r21168, r21169, MPFR_RNDN);
        mpfr_sub(r21171, r21165, r21170, MPFR_RNDN);
        if (mpfr_get_si(r21160, MPFR_RNDN)) { mpfr_set(r21172, r21171, MPFR_RNDN); } else { mpfr_set(r21172, r21146, MPFR_RNDN); };
        if (mpfr_get_si(r21158, MPFR_RNDN)) { mpfr_set(r21173, r21146, MPFR_RNDN); } else { mpfr_set(r21173, r21172, MPFR_RNDN); };
        if (mpfr_get_si(r21148, MPFR_RNDN)) { mpfr_set(r21174, r21156, MPFR_RNDN); } else { mpfr_set(r21174, r21173, MPFR_RNDN); };
        return mpfr_get_d(r21174, MPFR_RNDN);
}

