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

char *name = "expq2 (section 3.11)";

double f_if(float x) {
        float r26813 = x;
        float r26814 = exp(r26813);
        float r26815 = 1;
        float r26816 = r26814 - r26815;
        float r26817 = r26814 / r26816;
        return r26817;
}

double f_id(double x) {
        double r26818 = x;
        double r26819 = exp(r26818);
        double r26820 = 1;
        double r26821 = r26819 - r26820;
        double r26822 = r26819 / r26821;
        return r26822;
}


double f_of(float x) {
        float r26823 = x;
        float r26824 = exp(r26823);
        float r26825 = 0.9983021854475828;
        bool r26826 = r26824 <= r26825;
        float r26827 = 1;
        float r26828 = r26824 - r26827;
        float r26829 = r26824 / r26828;
        float r26830 = 3;
        float r26831 = pow(r26829, r26830);
        float r26832 = cbrt(r26831);
        float r26833 = 1/2;
        float r26834 = r26827 / r26823;
        float r26835 = 1/12;
        float r26836 = r26835 * r26823;
        float r26837 = r26834 + r26836;
        float r26838 = r26833 + r26837;
        float r26839 = r26826 ? r26832 : r26838;
        return r26839;
}

double f_od(double x) {
        double r26840 = x;
        double r26841 = exp(r26840);
        double r26842 = 0.9983021854475828;
        bool r26843 = r26841 <= r26842;
        double r26844 = 1;
        double r26845 = r26841 - r26844;
        double r26846 = r26841 / r26845;
        double r26847 = 3;
        double r26848 = pow(r26846, r26847);
        double r26849 = cbrt(r26848);
        double r26850 = 1/2;
        double r26851 = r26844 / r26840;
        double r26852 = 1/12;
        double r26853 = r26852 * r26840;
        double r26854 = r26851 + r26853;
        double r26855 = r26850 + r26854;
        double r26856 = r26843 ? r26849 : r26855;
        return r26856;
}

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 r26857, r26858, r26859, r26860, r26861;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26857);
        mpfr_init(r26858);
        mpfr_init_set_str(r26859, "1", 10, MPFR_RNDN);
        mpfr_init(r26860);
        mpfr_init(r26861);
}

double f_im(double x) {
        mpfr_set_d(r26857, x, MPFR_RNDN);
        mpfr_exp(r26858, r26857, MPFR_RNDN);
        ;
        mpfr_sub(r26860, r26858, r26859, MPFR_RNDN);
        mpfr_div(r26861, r26858, r26860, MPFR_RNDN);
        return mpfr_get_d(r26861, MPFR_RNDN);
}

static mpfr_t r26862, r26863, r26864, r26865, r26866, r26867, r26868, r26869, r26870, r26871, r26872, r26873, r26874, r26875, r26876, r26877, r26878;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26862);
        mpfr_init(r26863);
        mpfr_init_set_str(r26864, "0.9983021854475828", 10, MPFR_RNDN);
        mpfr_init(r26865);
        mpfr_init_set_str(r26866, "1", 10, MPFR_RNDN);
        mpfr_init(r26867);
        mpfr_init(r26868);
        mpfr_init_set_str(r26869, "3", 10, MPFR_RNDN);
        mpfr_init(r26870);
        mpfr_init(r26871);
        mpfr_init_set_str(r26872, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26873);
        mpfr_init_set_str(r26874, "1/12", 10, MPFR_RNDN);
        mpfr_init(r26875);
        mpfr_init(r26876);
        mpfr_init(r26877);
        mpfr_init(r26878);
}

double f_fm(double x) {
        mpfr_set_d(r26862, x, MPFR_RNDN);
        mpfr_exp(r26863, r26862, MPFR_RNDN);
        ;
        mpfr_set_si(r26865, mpfr_cmp(r26863, r26864) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r26867, r26863, r26866, MPFR_RNDN);
        mpfr_div(r26868, r26863, r26867, MPFR_RNDN);
        ;
        mpfr_pow(r26870, r26868, r26869, MPFR_RNDN);
        mpfr_cbrt(r26871, r26870, MPFR_RNDN);
        ;
        mpfr_div(r26873, r26866, r26862, MPFR_RNDN);
        ;
        mpfr_mul(r26875, r26874, r26862, MPFR_RNDN);
        mpfr_add(r26876, r26873, r26875, MPFR_RNDN);
        mpfr_add(r26877, r26872, r26876, MPFR_RNDN);
        if (mpfr_get_si(r26865, MPFR_RNDN)) { mpfr_set(r26878, r26871, MPFR_RNDN); } else { mpfr_set(r26878, r26877, MPFR_RNDN); };
        return mpfr_get_d(r26878, MPFR_RNDN);
}

static mpfr_t r26879, r26880, r26881, r26882, r26883, r26884, r26885, r26886, r26887, r26888, r26889, r26890, r26891, r26892, r26893, r26894, r26895;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26879);
        mpfr_init(r26880);
        mpfr_init_set_str(r26881, "0.9983021854475828", 10, MPFR_RNDN);
        mpfr_init(r26882);
        mpfr_init_set_str(r26883, "1", 10, MPFR_RNDN);
        mpfr_init(r26884);
        mpfr_init(r26885);
        mpfr_init_set_str(r26886, "3", 10, MPFR_RNDN);
        mpfr_init(r26887);
        mpfr_init(r26888);
        mpfr_init_set_str(r26889, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26890);
        mpfr_init_set_str(r26891, "1/12", 10, MPFR_RNDN);
        mpfr_init(r26892);
        mpfr_init(r26893);
        mpfr_init(r26894);
        mpfr_init(r26895);
}

double f_dm(double x) {
        mpfr_set_d(r26879, x, MPFR_RNDN);
        mpfr_exp(r26880, r26879, MPFR_RNDN);
        ;
        mpfr_set_si(r26882, mpfr_cmp(r26880, r26881) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r26884, r26880, r26883, MPFR_RNDN);
        mpfr_div(r26885, r26880, r26884, MPFR_RNDN);
        ;
        mpfr_pow(r26887, r26885, r26886, MPFR_RNDN);
        mpfr_cbrt(r26888, r26887, MPFR_RNDN);
        ;
        mpfr_div(r26890, r26883, r26879, MPFR_RNDN);
        ;
        mpfr_mul(r26892, r26891, r26879, MPFR_RNDN);
        mpfr_add(r26893, r26890, r26892, MPFR_RNDN);
        mpfr_add(r26894, r26889, r26893, MPFR_RNDN);
        if (mpfr_get_si(r26882, MPFR_RNDN)) { mpfr_set(r26895, r26888, MPFR_RNDN); } else { mpfr_set(r26895, r26894, MPFR_RNDN); };
        return mpfr_get_d(r26895, MPFR_RNDN);
}

