#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 r10142 = x;
        float r10143 = exp(r10142);
        float r10144 = 1;
        float r10145 = r10143 - r10144;
        float r10146 = r10145 / r10142;
        return r10146;
}

double f_id(double x) {
        double r10147 = x;
        double r10148 = exp(r10147);
        double r10149 = 1;
        double r10150 = r10148 - r10149;
        double r10151 = r10150 / r10147;
        return r10151;
}


double f_of(float x) {
        float r10152 = 1/6;
        float r10153 = x;
        float r10154 = 2;
        float r10155 = pow(r10153, r10154);
        float r10156 = r10152 * r10155;
        float r10157 = 1/2;
        float r10158 = r10157 * r10153;
        float r10159 = 1;
        float r10160 = r10158 + r10159;
        float r10161 = r10156 + r10160;
        float r10162 = 1.0154466335240904;
        bool r10163 = r10161 <= r10162;
        float r10164 = r10153 + r10153;
        float r10165 = exp(r10164);
        float r10166 = r10165 - r10159;
        float r10167 = exp(r10153);
        float r10168 = r10167 + r10159;
        float r10169 = r10166 / r10168;
        float r10170 = r10169 / r10153;
        float r10171 = r10163 ? r10161 : r10170;
        return r10171;
}

double f_od(double x) {
        double r10172 = 1/6;
        double r10173 = x;
        double r10174 = 2;
        double r10175 = pow(r10173, r10174);
        double r10176 = r10172 * r10175;
        double r10177 = 1/2;
        double r10178 = r10177 * r10173;
        double r10179 = 1;
        double r10180 = r10178 + r10179;
        double r10181 = r10176 + r10180;
        double r10182 = 1.0154466335240904;
        bool r10183 = r10181 <= r10182;
        double r10184 = r10173 + r10173;
        double r10185 = exp(r10184);
        double r10186 = r10185 - r10179;
        double r10187 = exp(r10173);
        double r10188 = r10187 + r10179;
        double r10189 = r10186 / r10188;
        double r10190 = r10189 / r10173;
        double r10191 = r10183 ? r10181 : r10190;
        return r10191;
}

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 r10192, r10193, r10194, r10195, r10196;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10192);
        mpfr_init(r10193);
        mpfr_init_set_str(r10194, "1", 10, MPFR_RNDN);
        mpfr_init(r10195);
        mpfr_init(r10196);
}

double f_im(double x) {
        mpfr_set_d(r10192, x, MPFR_RNDN);
        mpfr_exp(r10193, r10192, MPFR_RNDN);
        ;
        mpfr_sub(r10195, r10193, r10194, MPFR_RNDN);
        mpfr_div(r10196, r10195, r10192, MPFR_RNDN);
        return mpfr_get_d(r10196, MPFR_RNDN);
}

static mpfr_t r10197, r10198, r10199, r10200, r10201, r10202, r10203, r10204, r10205, r10206, r10207, r10208, r10209, r10210, r10211, r10212, r10213, r10214, r10215, r10216;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r10197, "1/6", 10, MPFR_RNDN);
        mpfr_init(r10198);
        mpfr_init_set_str(r10199, "2", 10, MPFR_RNDN);
        mpfr_init(r10200);
        mpfr_init(r10201);
        mpfr_init_set_str(r10202, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10203);
        mpfr_init_set_str(r10204, "1", 10, MPFR_RNDN);
        mpfr_init(r10205);
        mpfr_init(r10206);
        mpfr_init_set_str(r10207, "1.0154466335240904", 10, MPFR_RNDN);
        mpfr_init(r10208);
        mpfr_init(r10209);
        mpfr_init(r10210);
        mpfr_init(r10211);
        mpfr_init(r10212);
        mpfr_init(r10213);
        mpfr_init(r10214);
        mpfr_init(r10215);
        mpfr_init(r10216);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r10198, x, MPFR_RNDN);
        ;
        mpfr_pow(r10200, r10198, r10199, MPFR_RNDN);
        mpfr_mul(r10201, r10197, r10200, MPFR_RNDN);
        ;
        mpfr_mul(r10203, r10202, r10198, MPFR_RNDN);
        ;
        mpfr_add(r10205, r10203, r10204, MPFR_RNDN);
        mpfr_add(r10206, r10201, r10205, MPFR_RNDN);
        ;
        mpfr_set_si(r10208, mpfr_cmp(r10206, r10207) <= 0, MPFR_RNDN);
        mpfr_add(r10209, r10198, r10198, MPFR_RNDN);
        mpfr_exp(r10210, r10209, MPFR_RNDN);
        mpfr_sub(r10211, r10210, r10204, MPFR_RNDN);
        mpfr_exp(r10212, r10198, MPFR_RNDN);
        mpfr_add(r10213, r10212, r10204, MPFR_RNDN);
        mpfr_div(r10214, r10211, r10213, MPFR_RNDN);
        mpfr_div(r10215, r10214, r10198, MPFR_RNDN);
        if (mpfr_get_si(r10208, MPFR_RNDN)) { mpfr_set(r10216, r10206, MPFR_RNDN); } else { mpfr_set(r10216, r10215, MPFR_RNDN); };
        return mpfr_get_d(r10216, MPFR_RNDN);
}

static mpfr_t r10217, r10218, r10219, r10220, r10221, r10222, r10223, r10224, r10225, r10226, r10227, r10228, r10229, r10230, r10231, r10232, r10233, r10234, r10235, r10236;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r10217, "1/6", 10, MPFR_RNDN);
        mpfr_init(r10218);
        mpfr_init_set_str(r10219, "2", 10, MPFR_RNDN);
        mpfr_init(r10220);
        mpfr_init(r10221);
        mpfr_init_set_str(r10222, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10223);
        mpfr_init_set_str(r10224, "1", 10, MPFR_RNDN);
        mpfr_init(r10225);
        mpfr_init(r10226);
        mpfr_init_set_str(r10227, "1.0154466335240904", 10, MPFR_RNDN);
        mpfr_init(r10228);
        mpfr_init(r10229);
        mpfr_init(r10230);
        mpfr_init(r10231);
        mpfr_init(r10232);
        mpfr_init(r10233);
        mpfr_init(r10234);
        mpfr_init(r10235);
        mpfr_init(r10236);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r10218, x, MPFR_RNDN);
        ;
        mpfr_pow(r10220, r10218, r10219, MPFR_RNDN);
        mpfr_mul(r10221, r10217, r10220, MPFR_RNDN);
        ;
        mpfr_mul(r10223, r10222, r10218, MPFR_RNDN);
        ;
        mpfr_add(r10225, r10223, r10224, MPFR_RNDN);
        mpfr_add(r10226, r10221, r10225, MPFR_RNDN);
        ;
        mpfr_set_si(r10228, mpfr_cmp(r10226, r10227) <= 0, MPFR_RNDN);
        mpfr_add(r10229, r10218, r10218, MPFR_RNDN);
        mpfr_exp(r10230, r10229, MPFR_RNDN);
        mpfr_sub(r10231, r10230, r10224, MPFR_RNDN);
        mpfr_exp(r10232, r10218, MPFR_RNDN);
        mpfr_add(r10233, r10232, r10224, MPFR_RNDN);
        mpfr_div(r10234, r10231, r10233, MPFR_RNDN);
        mpfr_div(r10235, r10234, r10218, MPFR_RNDN);
        if (mpfr_get_si(r10228, MPFR_RNDN)) { mpfr_set(r10236, r10226, MPFR_RNDN); } else { mpfr_set(r10236, r10235, MPFR_RNDN); };
        return mpfr_get_d(r10236, MPFR_RNDN);
}

