#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 r48191 = x;
        float r48192 = exp(r48191);
        float r48193 = 1;
        float r48194 = r48192 - r48193;
        float r48195 = r48194 / r48191;
        return r48195;
}

double f_id(double x) {
        double r48196 = x;
        double r48197 = exp(r48196);
        double r48198 = 1;
        double r48199 = r48197 - r48198;
        double r48200 = r48199 / r48196;
        return r48200;
}


double f_of(float x) {
        float r48201 = x;
        float r48202 = -3.979550813088296e-22;
        bool r48203 = r48201 <= r48202;
        float r48204 = exp(r48201);
        float r48205 = 1;
        float r48206 = r48204 - r48205;
        float r48207 = exp(r48206);
        float r48208 = log(r48207);
        float r48209 = r48208 / r48201;
        float r48210 = 1/6;
        float r48211 = 2;
        float r48212 = pow(r48201, r48211);
        float r48213 = r48210 * r48212;
        float r48214 = 1/2;
        float r48215 = r48214 * r48201;
        float r48216 = r48205 + r48215;
        float r48217 = r48213 + r48216;
        float r48218 = r48203 ? r48209 : r48217;
        return r48218;
}

double f_od(double x) {
        double r48219 = x;
        double r48220 = -3.979550813088296e-22;
        bool r48221 = r48219 <= r48220;
        double r48222 = exp(r48219);
        double r48223 = 1;
        double r48224 = r48222 - r48223;
        double r48225 = exp(r48224);
        double r48226 = log(r48225);
        double r48227 = r48226 / r48219;
        double r48228 = 1/6;
        double r48229 = 2;
        double r48230 = pow(r48219, r48229);
        double r48231 = r48228 * r48230;
        double r48232 = 1/2;
        double r48233 = r48232 * r48219;
        double r48234 = r48223 + r48233;
        double r48235 = r48231 + r48234;
        double r48236 = r48221 ? r48227 : r48235;
        return r48236;
}

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 r48237, r48238, r48239, r48240, r48241;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r48237);
        mpfr_init(r48238);
        mpfr_init_set_str(r48239, "1", 10, MPFR_RNDN);
        mpfr_init(r48240);
        mpfr_init(r48241);
}

double f_im(double x) {
        mpfr_set_d(r48237, x, MPFR_RNDN);
        mpfr_exp(r48238, r48237, MPFR_RNDN);
        ;
        mpfr_sub(r48240, r48238, r48239, MPFR_RNDN);
        mpfr_div(r48241, r48240, r48237, MPFR_RNDN);
        return mpfr_get_d(r48241, MPFR_RNDN);
}

static mpfr_t r48242, r48243, r48244, r48245, r48246, r48247, r48248, r48249, r48250, r48251, r48252, r48253, r48254, r48255, r48256, r48257, r48258, r48259;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r48242);
        mpfr_init_set_str(r48243, "-3.979550813088296e-22", 10, MPFR_RNDN);
        mpfr_init(r48244);
        mpfr_init(r48245);
        mpfr_init_set_str(r48246, "1", 10, MPFR_RNDN);
        mpfr_init(r48247);
        mpfr_init(r48248);
        mpfr_init(r48249);
        mpfr_init(r48250);
        mpfr_init_set_str(r48251, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r48252, "2", 10, MPFR_RNDN);
        mpfr_init(r48253);
        mpfr_init(r48254);
        mpfr_init_set_str(r48255, "1/2", 10, MPFR_RNDN);
        mpfr_init(r48256);
        mpfr_init(r48257);
        mpfr_init(r48258);
        mpfr_init(r48259);
}

double f_fm(double x) {
        mpfr_set_d(r48242, x, MPFR_RNDN);
        ;
        mpfr_set_si(r48244, mpfr_cmp(r48242, r48243) <= 0, MPFR_RNDN);
        mpfr_exp(r48245, r48242, MPFR_RNDN);
        ;
        mpfr_sub(r48247, r48245, r48246, MPFR_RNDN);
        mpfr_exp(r48248, r48247, MPFR_RNDN);
        mpfr_log(r48249, r48248, MPFR_RNDN);
        mpfr_div(r48250, r48249, r48242, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r48253, r48242, r48252, MPFR_RNDN);
        mpfr_mul(r48254, r48251, r48253, MPFR_RNDN);
        ;
        mpfr_mul(r48256, r48255, r48242, MPFR_RNDN);
        mpfr_add(r48257, r48246, r48256, MPFR_RNDN);
        mpfr_add(r48258, r48254, r48257, MPFR_RNDN);
        if (mpfr_get_si(r48244, MPFR_RNDN)) { mpfr_set(r48259, r48250, MPFR_RNDN); } else { mpfr_set(r48259, r48258, MPFR_RNDN); };
        return mpfr_get_d(r48259, MPFR_RNDN);
}

static mpfr_t r48260, r48261, r48262, r48263, r48264, r48265, r48266, r48267, r48268, r48269, r48270, r48271, r48272, r48273, r48274, r48275, r48276, r48277;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r48260);
        mpfr_init_set_str(r48261, "-3.979550813088296e-22", 10, MPFR_RNDN);
        mpfr_init(r48262);
        mpfr_init(r48263);
        mpfr_init_set_str(r48264, "1", 10, MPFR_RNDN);
        mpfr_init(r48265);
        mpfr_init(r48266);
        mpfr_init(r48267);
        mpfr_init(r48268);
        mpfr_init_set_str(r48269, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r48270, "2", 10, MPFR_RNDN);
        mpfr_init(r48271);
        mpfr_init(r48272);
        mpfr_init_set_str(r48273, "1/2", 10, MPFR_RNDN);
        mpfr_init(r48274);
        mpfr_init(r48275);
        mpfr_init(r48276);
        mpfr_init(r48277);
}

double f_dm(double x) {
        mpfr_set_d(r48260, x, MPFR_RNDN);
        ;
        mpfr_set_si(r48262, mpfr_cmp(r48260, r48261) <= 0, MPFR_RNDN);
        mpfr_exp(r48263, r48260, MPFR_RNDN);
        ;
        mpfr_sub(r48265, r48263, r48264, MPFR_RNDN);
        mpfr_exp(r48266, r48265, MPFR_RNDN);
        mpfr_log(r48267, r48266, MPFR_RNDN);
        mpfr_div(r48268, r48267, r48260, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r48271, r48260, r48270, MPFR_RNDN);
        mpfr_mul(r48272, r48269, r48271, MPFR_RNDN);
        ;
        mpfr_mul(r48274, r48273, r48260, MPFR_RNDN);
        mpfr_add(r48275, r48264, r48274, MPFR_RNDN);
        mpfr_add(r48276, r48272, r48275, MPFR_RNDN);
        if (mpfr_get_si(r48262, MPFR_RNDN)) { mpfr_set(r48277, r48268, MPFR_RNDN); } else { mpfr_set(r48277, r48276, MPFR_RNDN); };
        return mpfr_get_d(r48277, MPFR_RNDN);
}

