#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Kahan's exp quotient";

double f_if(float x) {
        float r26006 = x;
        float r26007 = exp(r26006);
        float r26008 = 1;
        float r26009 = r26007 - r26008;
        float r26010 = r26009 / r26006;
        return r26010;
}

double f_id(double x) {
        double r26011 = x;
        double r26012 = exp(r26011);
        double r26013 = 1;
        double r26014 = r26012 - r26013;
        double r26015 = r26014 / r26011;
        return r26015;
}


double f_of(float x) {
        float r26016 = x;
        float r26017 = 1/6;
        float r26018 = r26016 * r26017;
        float r26019 = r26018 * r26016;
        float r26020 = 1;
        float r26021 = 1/2;
        float r26022 = r26021 * r26016;
        float r26023 = r26020 + r26022;
        float r26024 = r26019 + r26023;
        float r26025 = 3;
        float r26026 = pow(r26024, r26025);
        float r26027 = cbrt(r26026);
        float r26028 = 1.0001133699073637;
        bool r26029 = r26027 <= r26028;
        float r26030 = 2;
        float r26031 = pow(r26016, r26030);
        float r26032 = r26017 * r26031;
        float r26033 = r26032 + r26023;
        float r26034 = r26016 + r26016;
        float r26035 = exp(r26034);
        float r26036 = r26035 - r26020;
        float r26037 = cbrt(r26036);
        float r26038 = r26037 * r26037;
        float r26039 = exp(r26016);
        float r26040 = r26039 * r26039;
        float r26041 = r26040 - r26020;
        float r26042 = cbrt(r26041);
        float r26043 = r26038 * r26042;
        float r26044 = r26039 + r26020;
        float r26045 = r26016 * r26044;
        float r26046 = r26043 / r26045;
        float r26047 = r26029 ? r26033 : r26046;
        return r26047;
}

double f_od(double x) {
        double r26048 = x;
        double r26049 = 1/6;
        double r26050 = r26048 * r26049;
        double r26051 = r26050 * r26048;
        double r26052 = 1;
        double r26053 = 1/2;
        double r26054 = r26053 * r26048;
        double r26055 = r26052 + r26054;
        double r26056 = r26051 + r26055;
        double r26057 = 3;
        double r26058 = pow(r26056, r26057);
        double r26059 = cbrt(r26058);
        double r26060 = 1.0001133699073637;
        bool r26061 = r26059 <= r26060;
        double r26062 = 2;
        double r26063 = pow(r26048, r26062);
        double r26064 = r26049 * r26063;
        double r26065 = r26064 + r26055;
        double r26066 = r26048 + r26048;
        double r26067 = exp(r26066);
        double r26068 = r26067 - r26052;
        double r26069 = cbrt(r26068);
        double r26070 = r26069 * r26069;
        double r26071 = exp(r26048);
        double r26072 = r26071 * r26071;
        double r26073 = r26072 - r26052;
        double r26074 = cbrt(r26073);
        double r26075 = r26070 * r26074;
        double r26076 = r26071 + r26052;
        double r26077 = r26048 * r26076;
        double r26078 = r26075 / r26077;
        double r26079 = r26061 ? r26065 : r26078;
        return r26079;
}

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 r26080, r26081, r26082, r26083, r26084;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26080);
        mpfr_init(r26081);
        mpfr_init_set_str(r26082, "1", 10, MPFR_RNDN);
        mpfr_init(r26083);
        mpfr_init(r26084);
}

double f_im(double x) {
        mpfr_set_d(r26080, x, MPFR_RNDN);
        mpfr_exp(r26081, r26080, MPFR_RNDN);
        ;
        mpfr_sub(r26083, r26081, r26082, MPFR_RNDN);
        mpfr_div(r26084, r26083, r26080, MPFR_RNDN);
        return mpfr_get_d(r26084, MPFR_RNDN);
}

static mpfr_t r26085, r26086, r26087, r26088, r26089, r26090, r26091, r26092, r26093, r26094, r26095, r26096, r26097, r26098, r26099, r26100, r26101, r26102, r26103, r26104, r26105, r26106, r26107, r26108, r26109, r26110, r26111, r26112, r26113, r26114, r26115, r26116;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26085);
        mpfr_init_set_str(r26086, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26087);
        mpfr_init(r26088);
        mpfr_init_set_str(r26089, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r26090, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26091);
        mpfr_init(r26092);
        mpfr_init(r26093);
        mpfr_init_set_str(r26094, "3", 10, MPFR_RNDN);
        mpfr_init(r26095);
        mpfr_init(r26096);
        mpfr_init_set_str(r26097, "1.0001133699073637", 10, MPFR_RNDN);
        mpfr_init(r26098);
        mpfr_init_set_str(r26099, "2", 10, MPFR_RNDN);
        mpfr_init(r26100);
        mpfr_init(r26101);
        mpfr_init(r26102);
        mpfr_init(r26103);
        mpfr_init(r26104);
        mpfr_init(r26105);
        mpfr_init(r26106);
        mpfr_init(r26107);
        mpfr_init(r26108);
        mpfr_init(r26109);
        mpfr_init(r26110);
        mpfr_init(r26111);
        mpfr_init(r26112);
        mpfr_init(r26113);
        mpfr_init(r26114);
        mpfr_init(r26115);
        mpfr_init(r26116);
}

double f_fm(double x) {
        mpfr_set_d(r26085, x, MPFR_RNDN);
        ;
        mpfr_mul(r26087, r26085, r26086, MPFR_RNDN);
        mpfr_mul(r26088, r26087, r26085, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r26091, r26090, r26085, MPFR_RNDN);
        mpfr_add(r26092, r26089, r26091, MPFR_RNDN);
        mpfr_add(r26093, r26088, r26092, MPFR_RNDN);
        ;
        mpfr_pow(r26095, r26093, r26094, MPFR_RNDN);
        mpfr_cbrt(r26096, r26095, MPFR_RNDN);
        ;
        mpfr_set_si(r26098, mpfr_cmp(r26096, r26097) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r26100, r26085, r26099, MPFR_RNDN);
        mpfr_mul(r26101, r26086, r26100, MPFR_RNDN);
        mpfr_add(r26102, r26101, r26092, MPFR_RNDN);
        mpfr_add(r26103, r26085, r26085, MPFR_RNDN);
        mpfr_exp(r26104, r26103, MPFR_RNDN);
        mpfr_sub(r26105, r26104, r26089, MPFR_RNDN);
        mpfr_cbrt(r26106, r26105, MPFR_RNDN);
        mpfr_mul(r26107, r26106, r26106, MPFR_RNDN);
        mpfr_exp(r26108, r26085, MPFR_RNDN);
        mpfr_mul(r26109, r26108, r26108, MPFR_RNDN);
        mpfr_sub(r26110, r26109, r26089, MPFR_RNDN);
        mpfr_cbrt(r26111, r26110, MPFR_RNDN);
        mpfr_mul(r26112, r26107, r26111, MPFR_RNDN);
        mpfr_add(r26113, r26108, r26089, MPFR_RNDN);
        mpfr_mul(r26114, r26085, r26113, MPFR_RNDN);
        mpfr_div(r26115, r26112, r26114, MPFR_RNDN);
        if (mpfr_get_si(r26098, MPFR_RNDN)) { mpfr_set(r26116, r26102, MPFR_RNDN); } else { mpfr_set(r26116, r26115, MPFR_RNDN); };
        return mpfr_get_d(r26116, MPFR_RNDN);
}

static mpfr_t r26117, r26118, r26119, r26120, r26121, r26122, r26123, r26124, r26125, r26126, r26127, r26128, r26129, r26130, r26131, r26132, r26133, r26134, r26135, r26136, r26137, r26138, r26139, r26140, r26141, r26142, r26143, r26144, r26145, r26146, r26147, r26148;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26117);
        mpfr_init_set_str(r26118, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26119);
        mpfr_init(r26120);
        mpfr_init_set_str(r26121, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r26122, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26123);
        mpfr_init(r26124);
        mpfr_init(r26125);
        mpfr_init_set_str(r26126, "3", 10, MPFR_RNDN);
        mpfr_init(r26127);
        mpfr_init(r26128);
        mpfr_init_set_str(r26129, "1.0001133699073637", 10, MPFR_RNDN);
        mpfr_init(r26130);
        mpfr_init_set_str(r26131, "2", 10, MPFR_RNDN);
        mpfr_init(r26132);
        mpfr_init(r26133);
        mpfr_init(r26134);
        mpfr_init(r26135);
        mpfr_init(r26136);
        mpfr_init(r26137);
        mpfr_init(r26138);
        mpfr_init(r26139);
        mpfr_init(r26140);
        mpfr_init(r26141);
        mpfr_init(r26142);
        mpfr_init(r26143);
        mpfr_init(r26144);
        mpfr_init(r26145);
        mpfr_init(r26146);
        mpfr_init(r26147);
        mpfr_init(r26148);
}

double f_dm(double x) {
        mpfr_set_d(r26117, x, MPFR_RNDN);
        ;
        mpfr_mul(r26119, r26117, r26118, MPFR_RNDN);
        mpfr_mul(r26120, r26119, r26117, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r26123, r26122, r26117, MPFR_RNDN);
        mpfr_add(r26124, r26121, r26123, MPFR_RNDN);
        mpfr_add(r26125, r26120, r26124, MPFR_RNDN);
        ;
        mpfr_pow(r26127, r26125, r26126, MPFR_RNDN);
        mpfr_cbrt(r26128, r26127, MPFR_RNDN);
        ;
        mpfr_set_si(r26130, mpfr_cmp(r26128, r26129) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r26132, r26117, r26131, MPFR_RNDN);
        mpfr_mul(r26133, r26118, r26132, MPFR_RNDN);
        mpfr_add(r26134, r26133, r26124, MPFR_RNDN);
        mpfr_add(r26135, r26117, r26117, MPFR_RNDN);
        mpfr_exp(r26136, r26135, MPFR_RNDN);
        mpfr_sub(r26137, r26136, r26121, MPFR_RNDN);
        mpfr_cbrt(r26138, r26137, MPFR_RNDN);
        mpfr_mul(r26139, r26138, r26138, MPFR_RNDN);
        mpfr_exp(r26140, r26117, MPFR_RNDN);
        mpfr_mul(r26141, r26140, r26140, MPFR_RNDN);
        mpfr_sub(r26142, r26141, r26121, MPFR_RNDN);
        mpfr_cbrt(r26143, r26142, MPFR_RNDN);
        mpfr_mul(r26144, r26139, r26143, MPFR_RNDN);
        mpfr_add(r26145, r26140, r26121, MPFR_RNDN);
        mpfr_mul(r26146, r26117, r26145, MPFR_RNDN);
        mpfr_div(r26147, r26144, r26146, MPFR_RNDN);
        if (mpfr_get_si(r26130, MPFR_RNDN)) { mpfr_set(r26148, r26134, MPFR_RNDN); } else { mpfr_set(r26148, r26147, MPFR_RNDN); };
        return mpfr_get_d(r26148, MPFR_RNDN);
}

