#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 r27146 = x;
        float r27147 = exp(r27146);
        float r27148 = 1;
        float r27149 = r27147 - r27148;
        float r27150 = r27147 / r27149;
        return r27150;
}

double f_id(double x) {
        double r27151 = x;
        double r27152 = exp(r27151);
        double r27153 = 1;
        double r27154 = r27152 - r27153;
        double r27155 = r27152 / r27154;
        return r27155;
}


double f_of(float x) {
        float r27156 = 1;
        float r27157 = 1/6;
        float r27158 = x;
        float r27159 = 3;
        float r27160 = pow(r27158, r27159);
        float r27161 = r27157 * r27160;
        float r27162 = r27161 + r27158;
        float r27163 = 1/2;
        float r27164 = 2;
        float r27165 = pow(r27158, r27164);
        float r27166 = r27163 * r27165;
        float r27167 = r27162 - r27166;
        float r27168 = r27156 / r27167;
        float r27169 = -147.5620355352164;
        bool r27170 = r27168 <= r27169;
        float r27171 = exp(r27158);
        float r27172 = r27166 + r27162;
        float r27173 = r27171 / r27172;
        float r27174 = 582800.4550585768;
        bool r27175 = r27168 <= r27174;
        float r27176 = -r27158;
        float r27177 = exp(r27176);
        float r27178 = r27156 - r27177;
        float r27179 = r27156 / r27178;
        float r27180 = r27175 ? r27179 : r27168;
        float r27181 = r27170 ? r27173 : r27180;
        return r27181;
}

double f_od(double x) {
        double r27182 = 1;
        double r27183 = 1/6;
        double r27184 = x;
        double r27185 = 3;
        double r27186 = pow(r27184, r27185);
        double r27187 = r27183 * r27186;
        double r27188 = r27187 + r27184;
        double r27189 = 1/2;
        double r27190 = 2;
        double r27191 = pow(r27184, r27190);
        double r27192 = r27189 * r27191;
        double r27193 = r27188 - r27192;
        double r27194 = r27182 / r27193;
        double r27195 = -147.5620355352164;
        bool r27196 = r27194 <= r27195;
        double r27197 = exp(r27184);
        double r27198 = r27192 + r27188;
        double r27199 = r27197 / r27198;
        double r27200 = 582800.4550585768;
        bool r27201 = r27194 <= r27200;
        double r27202 = -r27184;
        double r27203 = exp(r27202);
        double r27204 = r27182 - r27203;
        double r27205 = r27182 / r27204;
        double r27206 = r27201 ? r27205 : r27194;
        double r27207 = r27196 ? r27199 : r27206;
        return r27207;
}

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 r27208, r27209, r27210, r27211, r27212;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27208);
        mpfr_init(r27209);
        mpfr_init_set_str(r27210, "1", 10, MPFR_RNDN);
        mpfr_init(r27211);
        mpfr_init(r27212);
}

double f_im(double x) {
        mpfr_set_d(r27208, x, MPFR_RNDN);
        mpfr_exp(r27209, r27208, MPFR_RNDN);
        ;
        mpfr_sub(r27211, r27209, r27210, MPFR_RNDN);
        mpfr_div(r27212, r27209, r27211, MPFR_RNDN);
        return mpfr_get_d(r27212, MPFR_RNDN);
}

static mpfr_t r27213, r27214, r27215, r27216, r27217, r27218, r27219, r27220, r27221, r27222, r27223, r27224, r27225, r27226, r27227, r27228, r27229, r27230, r27231, r27232, r27233, r27234, r27235, r27236, r27237, r27238;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r27213, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27214, "1/6", 10, MPFR_RNDN);
        mpfr_init(r27215);
        mpfr_init_set_str(r27216, "3", 10, MPFR_RNDN);
        mpfr_init(r27217);
        mpfr_init(r27218);
        mpfr_init(r27219);
        mpfr_init_set_str(r27220, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r27221, "2", 10, MPFR_RNDN);
        mpfr_init(r27222);
        mpfr_init(r27223);
        mpfr_init(r27224);
        mpfr_init(r27225);
        mpfr_init_set_str(r27226, "-147.5620355352164", 10, MPFR_RNDN);
        mpfr_init(r27227);
        mpfr_init(r27228);
        mpfr_init(r27229);
        mpfr_init(r27230);
        mpfr_init_set_str(r27231, "582800.4550585768", 10, MPFR_RNDN);
        mpfr_init(r27232);
        mpfr_init(r27233);
        mpfr_init(r27234);
        mpfr_init(r27235);
        mpfr_init(r27236);
        mpfr_init(r27237);
        mpfr_init(r27238);
}

double f_fm(double x) {
        ;
        ;
        mpfr_set_d(r27215, x, MPFR_RNDN);
        ;
        mpfr_pow(r27217, r27215, r27216, MPFR_RNDN);
        mpfr_mul(r27218, r27214, r27217, MPFR_RNDN);
        mpfr_add(r27219, r27218, r27215, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27222, r27215, r27221, MPFR_RNDN);
        mpfr_mul(r27223, r27220, r27222, MPFR_RNDN);
        mpfr_sub(r27224, r27219, r27223, MPFR_RNDN);
        mpfr_div(r27225, r27213, r27224, MPFR_RNDN);
        ;
        mpfr_set_si(r27227, mpfr_cmp(r27225, r27226) <= 0, MPFR_RNDN);
        mpfr_exp(r27228, r27215, MPFR_RNDN);
        mpfr_add(r27229, r27223, r27219, MPFR_RNDN);
        mpfr_div(r27230, r27228, r27229, MPFR_RNDN);
        ;
        mpfr_set_si(r27232, mpfr_cmp(r27225, r27231) <= 0, MPFR_RNDN);
        mpfr_neg(r27233, r27215, MPFR_RNDN);
        mpfr_exp(r27234, r27233, MPFR_RNDN);
        mpfr_sub(r27235, r27213, r27234, MPFR_RNDN);
        mpfr_div(r27236, r27213, r27235, MPFR_RNDN);
        if (mpfr_get_si(r27232, MPFR_RNDN)) { mpfr_set(r27237, r27236, MPFR_RNDN); } else { mpfr_set(r27237, r27225, MPFR_RNDN); };
        if (mpfr_get_si(r27227, MPFR_RNDN)) { mpfr_set(r27238, r27230, MPFR_RNDN); } else { mpfr_set(r27238, r27237, MPFR_RNDN); };
        return mpfr_get_d(r27238, MPFR_RNDN);
}

static mpfr_t r27239, r27240, r27241, r27242, r27243, r27244, r27245, r27246, r27247, r27248, r27249, r27250, r27251, r27252, r27253, r27254, r27255, r27256, r27257, r27258, r27259, r27260, r27261, r27262, r27263, r27264;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r27239, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27240, "1/6", 10, MPFR_RNDN);
        mpfr_init(r27241);
        mpfr_init_set_str(r27242, "3", 10, MPFR_RNDN);
        mpfr_init(r27243);
        mpfr_init(r27244);
        mpfr_init(r27245);
        mpfr_init_set_str(r27246, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r27247, "2", 10, MPFR_RNDN);
        mpfr_init(r27248);
        mpfr_init(r27249);
        mpfr_init(r27250);
        mpfr_init(r27251);
        mpfr_init_set_str(r27252, "-147.5620355352164", 10, MPFR_RNDN);
        mpfr_init(r27253);
        mpfr_init(r27254);
        mpfr_init(r27255);
        mpfr_init(r27256);
        mpfr_init_set_str(r27257, "582800.4550585768", 10, MPFR_RNDN);
        mpfr_init(r27258);
        mpfr_init(r27259);
        mpfr_init(r27260);
        mpfr_init(r27261);
        mpfr_init(r27262);
        mpfr_init(r27263);
        mpfr_init(r27264);
}

double f_dm(double x) {
        ;
        ;
        mpfr_set_d(r27241, x, MPFR_RNDN);
        ;
        mpfr_pow(r27243, r27241, r27242, MPFR_RNDN);
        mpfr_mul(r27244, r27240, r27243, MPFR_RNDN);
        mpfr_add(r27245, r27244, r27241, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27248, r27241, r27247, MPFR_RNDN);
        mpfr_mul(r27249, r27246, r27248, MPFR_RNDN);
        mpfr_sub(r27250, r27245, r27249, MPFR_RNDN);
        mpfr_div(r27251, r27239, r27250, MPFR_RNDN);
        ;
        mpfr_set_si(r27253, mpfr_cmp(r27251, r27252) <= 0, MPFR_RNDN);
        mpfr_exp(r27254, r27241, MPFR_RNDN);
        mpfr_add(r27255, r27249, r27245, MPFR_RNDN);
        mpfr_div(r27256, r27254, r27255, MPFR_RNDN);
        ;
        mpfr_set_si(r27258, mpfr_cmp(r27251, r27257) <= 0, MPFR_RNDN);
        mpfr_neg(r27259, r27241, MPFR_RNDN);
        mpfr_exp(r27260, r27259, MPFR_RNDN);
        mpfr_sub(r27261, r27239, r27260, MPFR_RNDN);
        mpfr_div(r27262, r27239, r27261, MPFR_RNDN);
        if (mpfr_get_si(r27258, MPFR_RNDN)) { mpfr_set(r27263, r27262, MPFR_RNDN); } else { mpfr_set(r27263, r27251, MPFR_RNDN); };
        if (mpfr_get_si(r27253, MPFR_RNDN)) { mpfr_set(r27264, r27256, MPFR_RNDN); } else { mpfr_set(r27264, r27263, MPFR_RNDN); };
        return mpfr_get_d(r27264, MPFR_RNDN);
}

