#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 r9180 = x;
        float r9181 = exp(r9180);
        float r9182 = 1.0f;
        float r9183 = r9181 - r9182;
        float r9184 = r9183 / r9180;
        return r9184;
}

double f_id(double x) {
        double r9185 = x;
        double r9186 = exp(r9185);
        double r9187 = 1.0;
        double r9188 = r9186 - r9187;
        double r9189 = r9188 / r9185;
        return r9189;
}


double f_of(float x) {
        float r9190 = 1.0f;
        float r9191 = 0.16666666666666666f;
        float r9192 = x;
        float r9193 = 2.0f;
        float r9194 = pow(r9192, r9193);
        float r9195 = r9191 * r9194;
        float r9196 = r9190 + r9195;
        float r9197 = 0.5f;
        float r9198 = r9197 * r9192;
        float r9199 = r9196 + r9198;
        float r9200 = 1.0001974428943352f;
        bool r9201 = r9199 <= r9200;
        float r9202 = exp(r9192);
        float r9203 = r9202 - r9190;
        float r9204 = cbrt(r9203);
        float r9205 = exp(r9203);
        float r9206 = log(r9205);
        float r9207 = cbrt(r9206);
        float r9208 = r9204 * r9207;
        float r9209 = r9202 * r9202;
        float r9210 = r9209 - r9190;
        float r9211 = r9190 + r9202;
        float r9212 = r9210 / r9211;
        float r9213 = cbrt(r9212);
        float r9214 = r9192 / r9213;
        float r9215 = r9208 / r9214;
        float r9216 = r9201 ? r9199 : r9215;
        return r9216;
}

double f_od(double x) {
        double r9217 = 1.0;
        double r9218 = 0.16666666666666666;
        double r9219 = x;
        double r9220 = 2.0;
        double r9221 = pow(r9219, r9220);
        double r9222 = r9218 * r9221;
        double r9223 = r9217 + r9222;
        double r9224 = 0.5;
        double r9225 = r9224 * r9219;
        double r9226 = r9223 + r9225;
        double r9227 = 1.0001974428943352;
        bool r9228 = r9226 <= r9227;
        double r9229 = exp(r9219);
        double r9230 = r9229 - r9217;
        double r9231 = cbrt(r9230);
        double r9232 = exp(r9230);
        double r9233 = log(r9232);
        double r9234 = cbrt(r9233);
        double r9235 = r9231 * r9234;
        double r9236 = r9229 * r9229;
        double r9237 = r9236 - r9217;
        double r9238 = r9217 + r9229;
        double r9239 = r9237 / r9238;
        double r9240 = cbrt(r9239);
        double r9241 = r9219 / r9240;
        double r9242 = r9235 / r9241;
        double r9243 = r9228 ? r9226 : r9242;
        return r9243;
}

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 r9244, r9245, r9246, r9247, r9248;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9244);
        mpfr_init(r9245);
        mpfr_init_set_str(r9246, "1", 10, MPFR_RNDN);
        mpfr_init(r9247);
        mpfr_init(r9248);
}

double f_im(double x) {
        mpfr_set_d(r9244, x, MPFR_RNDN);
        mpfr_exp(r9245, r9244, MPFR_RNDN);
        ;
        mpfr_sub(r9247, r9245, r9246, MPFR_RNDN);
        mpfr_div(r9248, r9247, r9244, MPFR_RNDN);
        return mpfr_get_d(r9248, MPFR_RNDN);
}

static mpfr_t r9249, r9250, r9251, r9252, r9253, r9254, r9255, r9256, r9257, r9258, r9259, r9260, r9261, r9262, r9263, r9264, r9265, r9266, r9267, r9268, r9269, r9270, r9271, r9272, r9273, r9274, r9275;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r9249, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r9250, "1/6", 10, MPFR_RNDN);
        mpfr_init(r9251);
        mpfr_init_set_str(r9252, "2", 10, MPFR_RNDN);
        mpfr_init(r9253);
        mpfr_init(r9254);
        mpfr_init(r9255);
        mpfr_init_set_str(r9256, "1/2", 10, MPFR_RNDN);
        mpfr_init(r9257);
        mpfr_init(r9258);
        mpfr_init_set_str(r9259, "1.0001974428943352", 10, MPFR_RNDN);
        mpfr_init(r9260);
        mpfr_init(r9261);
        mpfr_init(r9262);
        mpfr_init(r9263);
        mpfr_init(r9264);
        mpfr_init(r9265);
        mpfr_init(r9266);
        mpfr_init(r9267);
        mpfr_init(r9268);
        mpfr_init(r9269);
        mpfr_init(r9270);
        mpfr_init(r9271);
        mpfr_init(r9272);
        mpfr_init(r9273);
        mpfr_init(r9274);
        mpfr_init(r9275);
}

double f_fm(double x) {
        ;
        ;
        mpfr_set_d(r9251, x, MPFR_RNDN);
        ;
        mpfr_pow(r9253, r9251, r9252, MPFR_RNDN);
        mpfr_mul(r9254, r9250, r9253, MPFR_RNDN);
        mpfr_add(r9255, r9249, r9254, MPFR_RNDN);
        ;
        mpfr_mul(r9257, r9256, r9251, MPFR_RNDN);
        mpfr_add(r9258, r9255, r9257, MPFR_RNDN);
        ;
        mpfr_set_si(r9260, mpfr_cmp(r9258, r9259) <= 0, MPFR_RNDN);
        mpfr_exp(r9261, r9251, MPFR_RNDN);
        mpfr_sub(r9262, r9261, r9249, MPFR_RNDN);
        mpfr_cbrt(r9263, r9262, MPFR_RNDN);
        mpfr_exp(r9264, r9262, MPFR_RNDN);
        mpfr_log(r9265, r9264, MPFR_RNDN);
        mpfr_cbrt(r9266, r9265, MPFR_RNDN);
        mpfr_mul(r9267, r9263, r9266, MPFR_RNDN);
        mpfr_mul(r9268, r9261, r9261, MPFR_RNDN);
        mpfr_sub(r9269, r9268, r9249, MPFR_RNDN);
        mpfr_add(r9270, r9249, r9261, MPFR_RNDN);
        mpfr_div(r9271, r9269, r9270, MPFR_RNDN);
        mpfr_cbrt(r9272, r9271, MPFR_RNDN);
        mpfr_div(r9273, r9251, r9272, MPFR_RNDN);
        mpfr_div(r9274, r9267, r9273, MPFR_RNDN);
        if (mpfr_get_si(r9260, MPFR_RNDN)) { mpfr_set(r9275, r9258, MPFR_RNDN); } else { mpfr_set(r9275, r9274, MPFR_RNDN); };
        return mpfr_get_d(r9275, MPFR_RNDN);
}

static mpfr_t r9276, r9277, r9278, r9279, r9280, r9281, r9282, r9283, r9284, r9285, r9286, r9287, r9288, r9289, r9290, r9291, r9292, r9293, r9294, r9295, r9296, r9297, r9298, r9299, r9300, r9301, r9302;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r9276, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r9277, "1/6", 10, MPFR_RNDN);
        mpfr_init(r9278);
        mpfr_init_set_str(r9279, "2", 10, MPFR_RNDN);
        mpfr_init(r9280);
        mpfr_init(r9281);
        mpfr_init(r9282);
        mpfr_init_set_str(r9283, "1/2", 10, MPFR_RNDN);
        mpfr_init(r9284);
        mpfr_init(r9285);
        mpfr_init_set_str(r9286, "1.0001974428943352", 10, MPFR_RNDN);
        mpfr_init(r9287);
        mpfr_init(r9288);
        mpfr_init(r9289);
        mpfr_init(r9290);
        mpfr_init(r9291);
        mpfr_init(r9292);
        mpfr_init(r9293);
        mpfr_init(r9294);
        mpfr_init(r9295);
        mpfr_init(r9296);
        mpfr_init(r9297);
        mpfr_init(r9298);
        mpfr_init(r9299);
        mpfr_init(r9300);
        mpfr_init(r9301);
        mpfr_init(r9302);
}

double f_dm(double x) {
        ;
        ;
        mpfr_set_d(r9278, x, MPFR_RNDN);
        ;
        mpfr_pow(r9280, r9278, r9279, MPFR_RNDN);
        mpfr_mul(r9281, r9277, r9280, MPFR_RNDN);
        mpfr_add(r9282, r9276, r9281, MPFR_RNDN);
        ;
        mpfr_mul(r9284, r9283, r9278, MPFR_RNDN);
        mpfr_add(r9285, r9282, r9284, MPFR_RNDN);
        ;
        mpfr_set_si(r9287, mpfr_cmp(r9285, r9286) <= 0, MPFR_RNDN);
        mpfr_exp(r9288, r9278, MPFR_RNDN);
        mpfr_sub(r9289, r9288, r9276, MPFR_RNDN);
        mpfr_cbrt(r9290, r9289, MPFR_RNDN);
        mpfr_exp(r9291, r9289, MPFR_RNDN);
        mpfr_log(r9292, r9291, MPFR_RNDN);
        mpfr_cbrt(r9293, r9292, MPFR_RNDN);
        mpfr_mul(r9294, r9290, r9293, MPFR_RNDN);
        mpfr_mul(r9295, r9288, r9288, MPFR_RNDN);
        mpfr_sub(r9296, r9295, r9276, MPFR_RNDN);
        mpfr_add(r9297, r9276, r9288, MPFR_RNDN);
        mpfr_div(r9298, r9296, r9297, MPFR_RNDN);
        mpfr_cbrt(r9299, r9298, MPFR_RNDN);
        mpfr_div(r9300, r9278, r9299, MPFR_RNDN);
        mpfr_div(r9301, r9294, r9300, MPFR_RNDN);
        if (mpfr_get_si(r9287, MPFR_RNDN)) { mpfr_set(r9302, r9285, MPFR_RNDN); } else { mpfr_set(r9302, r9301, MPFR_RNDN); };
        return mpfr_get_d(r9302, MPFR_RNDN);
}

