#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 r48111 = x;
        float r48112 = exp(r48111);
        float r48113 = 1;
        float r48114 = r48112 - r48113;
        float r48115 = r48114 / r48111;
        return r48115;
}

double f_id(double x) {
        double r48116 = x;
        double r48117 = exp(r48116);
        double r48118 = 1;
        double r48119 = r48117 - r48118;
        double r48120 = r48119 / r48116;
        return r48120;
}


double f_of(float x) {
        float r48121 = x;
        float r48122 = -0.00018716697720646945;
        bool r48123 = r48121 <= r48122;
        float r48124 = exp(r48121);
        float r48125 = 1;
        float r48126 = r48124 - r48125;
        float r48127 = exp(r48126);
        float r48128 = log(r48127);
        float r48129 = r48128 / r48121;
        float r48130 = 1/6;
        float r48131 = 2;
        float r48132 = pow(r48121, r48131);
        float r48133 = r48130 * r48132;
        float r48134 = 1/2;
        float r48135 = r48134 * r48121;
        float r48136 = r48125 + r48135;
        float r48137 = r48133 + r48136;
        float r48138 = r48123 ? r48129 : r48137;
        return r48138;
}

double f_od(double x) {
        double r48139 = x;
        double r48140 = -0.00018716697720646945;
        bool r48141 = r48139 <= r48140;
        double r48142 = exp(r48139);
        double r48143 = 1;
        double r48144 = r48142 - r48143;
        double r48145 = exp(r48144);
        double r48146 = log(r48145);
        double r48147 = r48146 / r48139;
        double r48148 = 1/6;
        double r48149 = 2;
        double r48150 = pow(r48139, r48149);
        double r48151 = r48148 * r48150;
        double r48152 = 1/2;
        double r48153 = r48152 * r48139;
        double r48154 = r48143 + r48153;
        double r48155 = r48151 + r48154;
        double r48156 = r48141 ? r48147 : r48155;
        return r48156;
}

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 r48157, r48158, r48159, r48160, r48161;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r48157);
        mpfr_init(r48158);
        mpfr_init_set_str(r48159, "1", 10, MPFR_RNDN);
        mpfr_init(r48160);
        mpfr_init(r48161);
}

double f_im(double x) {
        mpfr_set_d(r48157, x, MPFR_RNDN);
        mpfr_exp(r48158, r48157, MPFR_RNDN);
        ;
        mpfr_sub(r48160, r48158, r48159, MPFR_RNDN);
        mpfr_div(r48161, r48160, r48157, MPFR_RNDN);
        return mpfr_get_d(r48161, MPFR_RNDN);
}

static mpfr_t r48162, r48163, r48164, r48165, r48166, r48167, r48168, r48169, r48170, r48171, r48172, r48173, r48174, r48175, r48176, r48177, r48178, r48179;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r48162);
        mpfr_init_set_str(r48163, "-0.00018716697720646945", 10, MPFR_RNDN);
        mpfr_init(r48164);
        mpfr_init(r48165);
        mpfr_init_set_str(r48166, "1", 10, MPFR_RNDN);
        mpfr_init(r48167);
        mpfr_init(r48168);
        mpfr_init(r48169);
        mpfr_init(r48170);
        mpfr_init_set_str(r48171, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r48172, "2", 10, MPFR_RNDN);
        mpfr_init(r48173);
        mpfr_init(r48174);
        mpfr_init_set_str(r48175, "1/2", 10, MPFR_RNDN);
        mpfr_init(r48176);
        mpfr_init(r48177);
        mpfr_init(r48178);
        mpfr_init(r48179);
}

double f_fm(double x) {
        mpfr_set_d(r48162, x, MPFR_RNDN);
        ;
        mpfr_set_si(r48164, mpfr_cmp(r48162, r48163) <= 0, MPFR_RNDN);
        mpfr_exp(r48165, r48162, MPFR_RNDN);
        ;
        mpfr_sub(r48167, r48165, r48166, MPFR_RNDN);
        mpfr_exp(r48168, r48167, MPFR_RNDN);
        mpfr_log(r48169, r48168, MPFR_RNDN);
        mpfr_div(r48170, r48169, r48162, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r48173, r48162, r48172, MPFR_RNDN);
        mpfr_mul(r48174, r48171, r48173, MPFR_RNDN);
        ;
        mpfr_mul(r48176, r48175, r48162, MPFR_RNDN);
        mpfr_add(r48177, r48166, r48176, MPFR_RNDN);
        mpfr_add(r48178, r48174, r48177, MPFR_RNDN);
        if (mpfr_get_si(r48164, MPFR_RNDN)) { mpfr_set(r48179, r48170, MPFR_RNDN); } else { mpfr_set(r48179, r48178, MPFR_RNDN); };
        return mpfr_get_d(r48179, MPFR_RNDN);
}

static mpfr_t r48180, r48181, r48182, r48183, r48184, r48185, r48186, r48187, r48188, r48189, r48190, r48191, r48192, r48193, r48194, r48195, r48196, r48197;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r48180);
        mpfr_init_set_str(r48181, "-0.00018716697720646945", 10, MPFR_RNDN);
        mpfr_init(r48182);
        mpfr_init(r48183);
        mpfr_init_set_str(r48184, "1", 10, MPFR_RNDN);
        mpfr_init(r48185);
        mpfr_init(r48186);
        mpfr_init(r48187);
        mpfr_init(r48188);
        mpfr_init_set_str(r48189, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r48190, "2", 10, MPFR_RNDN);
        mpfr_init(r48191);
        mpfr_init(r48192);
        mpfr_init_set_str(r48193, "1/2", 10, MPFR_RNDN);
        mpfr_init(r48194);
        mpfr_init(r48195);
        mpfr_init(r48196);
        mpfr_init(r48197);
}

double f_dm(double x) {
        mpfr_set_d(r48180, x, MPFR_RNDN);
        ;
        mpfr_set_si(r48182, mpfr_cmp(r48180, r48181) <= 0, MPFR_RNDN);
        mpfr_exp(r48183, r48180, MPFR_RNDN);
        ;
        mpfr_sub(r48185, r48183, r48184, MPFR_RNDN);
        mpfr_exp(r48186, r48185, MPFR_RNDN);
        mpfr_log(r48187, r48186, MPFR_RNDN);
        mpfr_div(r48188, r48187, r48180, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r48191, r48180, r48190, MPFR_RNDN);
        mpfr_mul(r48192, r48189, r48191, MPFR_RNDN);
        ;
        mpfr_mul(r48194, r48193, r48180, MPFR_RNDN);
        mpfr_add(r48195, r48184, r48194, MPFR_RNDN);
        mpfr_add(r48196, r48192, r48195, MPFR_RNDN);
        if (mpfr_get_si(r48182, MPFR_RNDN)) { mpfr_set(r48197, r48188, MPFR_RNDN); } else { mpfr_set(r48197, r48196, MPFR_RNDN); };
        return mpfr_get_d(r48197, MPFR_RNDN);
}

