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

char *name = "expax (section 3.5)";

double f_if(float a, float x) {
        float r39154 = a;
        float r39155 = x;
        float r39156 = r39154 * r39155;
        float r39157 = exp(r39156);
        float r39158 = 1;
        float r39159 = r39157 - r39158;
        return r39159;
}

double f_id(double a, double x) {
        double r39160 = a;
        double r39161 = x;
        double r39162 = r39160 * r39161;
        double r39163 = exp(r39162);
        double r39164 = 1;
        double r39165 = r39163 - r39164;
        return r39165;
}


double f_of(float a, float x) {
        float r39166 = a;
        float r39167 = x;
        float r39168 = r39166 * r39167;
        float r39169 = -1.4384882105786329e-06;
        bool r39170 = r39168 <= r39169;
        float r39171 = 2;
        float r39172 = 1;
        float r39173 = r39171 + r39172;
        float r39174 = r39167 * r39166;
        float r39175 = r39173 * r39174;
        float r39176 = exp(r39175);
        float r39177 = r39176 - r39172;
        float r39178 = exp(r39174);
        float r39179 = r39172 + r39178;
        float r39180 = exp(r39167);
        float r39181 = r39166 + r39166;
        float r39182 = pow(r39180, r39181);
        float r39183 = r39179 + r39182;
        float r39184 = r39177 / r39183;
        float r39185 = r39174 * r39174;
        float r39186 = 1/2;
        float r39187 = r39185 * r39186;
        float r39188 = r39187 + r39174;
        float r39189 = r39170 ? r39184 : r39188;
        return r39189;
}

double f_od(double a, double x) {
        double r39190 = a;
        double r39191 = x;
        double r39192 = r39190 * r39191;
        double r39193 = -1.4384882105786329e-06;
        bool r39194 = r39192 <= r39193;
        double r39195 = 2;
        double r39196 = 1;
        double r39197 = r39195 + r39196;
        double r39198 = r39191 * r39190;
        double r39199 = r39197 * r39198;
        double r39200 = exp(r39199);
        double r39201 = r39200 - r39196;
        double r39202 = exp(r39198);
        double r39203 = r39196 + r39202;
        double r39204 = exp(r39191);
        double r39205 = r39190 + r39190;
        double r39206 = pow(r39204, r39205);
        double r39207 = r39203 + r39206;
        double r39208 = r39201 / r39207;
        double r39209 = r39198 * r39198;
        double r39210 = 1/2;
        double r39211 = r39209 * r39210;
        double r39212 = r39211 + r39198;
        double r39213 = r39194 ? r39208 : r39212;
        return r39213;
}

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 r39214, r39215, r39216, r39217, r39218, r39219;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39214);
        mpfr_init(r39215);
        mpfr_init(r39216);
        mpfr_init(r39217);
        mpfr_init_set_str(r39218, "1", 10, MPFR_RNDN);
        mpfr_init(r39219);
}

double f_im(double a, double x) {
        mpfr_set_d(r39214, a, MPFR_RNDN);
        mpfr_set_d(r39215, x, MPFR_RNDN);
        mpfr_mul(r39216, r39214, r39215, MPFR_RNDN);
        mpfr_exp(r39217, r39216, MPFR_RNDN);
        ;
        mpfr_sub(r39219, r39217, r39218, MPFR_RNDN);
        return mpfr_get_d(r39219, MPFR_RNDN);
}

static mpfr_t r39220, r39221, r39222, r39223, r39224, r39225, r39226, r39227, r39228, r39229, r39230, r39231, r39232, r39233, r39234, r39235, r39236, r39237, r39238, r39239, r39240, r39241, r39242, r39243;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39220);
        mpfr_init(r39221);
        mpfr_init(r39222);
        mpfr_init_set_str(r39223, "-1.4384882105786329e-06", 10, MPFR_RNDN);
        mpfr_init(r39224);
        mpfr_init_set_str(r39225, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r39226, "1", 10, MPFR_RNDN);
        mpfr_init(r39227);
        mpfr_init(r39228);
        mpfr_init(r39229);
        mpfr_init(r39230);
        mpfr_init(r39231);
        mpfr_init(r39232);
        mpfr_init(r39233);
        mpfr_init(r39234);
        mpfr_init(r39235);
        mpfr_init(r39236);
        mpfr_init(r39237);
        mpfr_init(r39238);
        mpfr_init(r39239);
        mpfr_init_set_str(r39240, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39241);
        mpfr_init(r39242);
        mpfr_init(r39243);
}

double f_fm(double a, double x) {
        mpfr_set_d(r39220, a, MPFR_RNDN);
        mpfr_set_d(r39221, x, MPFR_RNDN);
        mpfr_mul(r39222, r39220, r39221, MPFR_RNDN);
        ;
        mpfr_set_si(r39224, mpfr_cmp(r39222, r39223) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_add(r39227, r39225, r39226, MPFR_RNDN);
        mpfr_mul(r39228, r39221, r39220, MPFR_RNDN);
        mpfr_mul(r39229, r39227, r39228, MPFR_RNDN);
        mpfr_exp(r39230, r39229, MPFR_RNDN);
        mpfr_sub(r39231, r39230, r39226, MPFR_RNDN);
        mpfr_exp(r39232, r39228, MPFR_RNDN);
        mpfr_add(r39233, r39226, r39232, MPFR_RNDN);
        mpfr_exp(r39234, r39221, MPFR_RNDN);
        mpfr_add(r39235, r39220, r39220, MPFR_RNDN);
        mpfr_pow(r39236, r39234, r39235, MPFR_RNDN);
        mpfr_add(r39237, r39233, r39236, MPFR_RNDN);
        mpfr_div(r39238, r39231, r39237, MPFR_RNDN);
        mpfr_mul(r39239, r39228, r39228, MPFR_RNDN);
        ;
        mpfr_mul(r39241, r39239, r39240, MPFR_RNDN);
        mpfr_add(r39242, r39241, r39228, MPFR_RNDN);
        if (mpfr_get_si(r39224, MPFR_RNDN)) { mpfr_set(r39243, r39238, MPFR_RNDN); } else { mpfr_set(r39243, r39242, MPFR_RNDN); };
        return mpfr_get_d(r39243, MPFR_RNDN);
}

static mpfr_t r39244, r39245, r39246, r39247, r39248, r39249, r39250, r39251, r39252, r39253, r39254, r39255, r39256, r39257, r39258, r39259, r39260, r39261, r39262, r39263, r39264, r39265, r39266, r39267;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39244);
        mpfr_init(r39245);
        mpfr_init(r39246);
        mpfr_init_set_str(r39247, "-1.4384882105786329e-06", 10, MPFR_RNDN);
        mpfr_init(r39248);
        mpfr_init_set_str(r39249, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r39250, "1", 10, MPFR_RNDN);
        mpfr_init(r39251);
        mpfr_init(r39252);
        mpfr_init(r39253);
        mpfr_init(r39254);
        mpfr_init(r39255);
        mpfr_init(r39256);
        mpfr_init(r39257);
        mpfr_init(r39258);
        mpfr_init(r39259);
        mpfr_init(r39260);
        mpfr_init(r39261);
        mpfr_init(r39262);
        mpfr_init(r39263);
        mpfr_init_set_str(r39264, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39265);
        mpfr_init(r39266);
        mpfr_init(r39267);
}

double f_dm(double a, double x) {
        mpfr_set_d(r39244, a, MPFR_RNDN);
        mpfr_set_d(r39245, x, MPFR_RNDN);
        mpfr_mul(r39246, r39244, r39245, MPFR_RNDN);
        ;
        mpfr_set_si(r39248, mpfr_cmp(r39246, r39247) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_add(r39251, r39249, r39250, MPFR_RNDN);
        mpfr_mul(r39252, r39245, r39244, MPFR_RNDN);
        mpfr_mul(r39253, r39251, r39252, MPFR_RNDN);
        mpfr_exp(r39254, r39253, MPFR_RNDN);
        mpfr_sub(r39255, r39254, r39250, MPFR_RNDN);
        mpfr_exp(r39256, r39252, MPFR_RNDN);
        mpfr_add(r39257, r39250, r39256, MPFR_RNDN);
        mpfr_exp(r39258, r39245, MPFR_RNDN);
        mpfr_add(r39259, r39244, r39244, MPFR_RNDN);
        mpfr_pow(r39260, r39258, r39259, MPFR_RNDN);
        mpfr_add(r39261, r39257, r39260, MPFR_RNDN);
        mpfr_div(r39262, r39255, r39261, MPFR_RNDN);
        mpfr_mul(r39263, r39252, r39252, MPFR_RNDN);
        ;
        mpfr_mul(r39265, r39263, r39264, MPFR_RNDN);
        mpfr_add(r39266, r39265, r39252, MPFR_RNDN);
        if (mpfr_get_si(r39248, MPFR_RNDN)) { mpfr_set(r39267, r39262, MPFR_RNDN); } else { mpfr_set(r39267, r39266, MPFR_RNDN); };
        return mpfr_get_d(r39267, MPFR_RNDN);
}

