#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 r35230 = a;
        float r35231 = x;
        float r35232 = r35230 * r35231;
        float r35233 = exp(r35232);
        float r35234 = 1.0f;
        float r35235 = r35233 - r35234;
        return r35235;
}

double f_id(double a, double x) {
        double r35236 = a;
        double r35237 = x;
        double r35238 = r35236 * r35237;
        double r35239 = exp(r35238);
        double r35240 = 1.0;
        double r35241 = r35239 - r35240;
        return r35241;
}


double f_of(float a, float x) {
        float r35242 = a;
        float r35243 = x;
        float r35244 = r35242 * r35243;
        float r35245 = -1.5153768898317694e-23f;
        bool r35246 = r35244 <= r35245;
        float r35247 = r35242 + r35242;
        float r35248 = r35243 * r35247;
        float r35249 = exp(r35248);
        float r35250 = exp(r35244);
        float r35251 = 1.0f;
        float r35252 = r35250 + r35251;
        float r35253 = r35249 / r35252;
        float r35254 = r35251 + r35250;
        float r35255 = r35251 / r35254;
        float r35256 = r35253 - r35255;
        float r35257 = r35242 * (r35242 * r35242);
        float r35258 = r35243 * (r35243 * r35243);
        float r35259 = r35257 * r35258;
        float r35260 = 0.16666666666666666f;
        float r35261 = r35259 * r35260;
        float r35262 = r35243 * r35242;
        float r35263 = r35261 + r35262;
        float r35264 = 0.5f;
        float r35265 = r35262 * r35262;
        float r35266 = r35264 * r35265;
        float r35267 = r35263 + r35266;
        float r35268 = r35246 ? r35256 : r35267;
        return r35268;
}

double f_od(double a, double x) {
        double r35269 = a;
        double r35270 = x;
        double r35271 = r35269 * r35270;
        double r35272 = -1.5153768898317694e-23;
        bool r35273 = r35271 <= r35272;
        double r35274 = r35269 + r35269;
        double r35275 = r35270 * r35274;
        double r35276 = exp(r35275);
        double r35277 = exp(r35271);
        double r35278 = 1.0;
        double r35279 = r35277 + r35278;
        double r35280 = r35276 / r35279;
        double r35281 = r35278 + r35277;
        double r35282 = r35278 / r35281;
        double r35283 = r35280 - r35282;
        double r35284 = r35269 * (r35269 * r35269);
        double r35285 = r35270 * (r35270 * r35270);
        double r35286 = r35284 * r35285;
        double r35287 = 0.16666666666666666;
        double r35288 = r35286 * r35287;
        double r35289 = r35270 * r35269;
        double r35290 = r35288 + r35289;
        double r35291 = 0.5;
        double r35292 = r35289 * r35289;
        double r35293 = r35291 * r35292;
        double r35294 = r35290 + r35293;
        double r35295 = r35273 ? r35283 : r35294;
        return r35295;
}

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 r35296, r35297, r35298, r35299, r35300, r35301;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r35296);
        mpfr_init(r35297);
        mpfr_init(r35298);
        mpfr_init(r35299);
        mpfr_init_set_str(r35300, "1", 10, MPFR_RNDN);
        mpfr_init(r35301);
}

double f_im(double a, double x) {
        mpfr_set_d(r35296, a, MPFR_RNDN);
        mpfr_set_d(r35297, x, MPFR_RNDN);
        mpfr_mul(r35298, r35296, r35297, MPFR_RNDN);
        mpfr_exp(r35299, r35298, MPFR_RNDN);
        ;
        mpfr_sub(r35301, r35299, r35300, MPFR_RNDN);
        return mpfr_get_d(r35301, MPFR_RNDN);
}

static mpfr_t r35302, r35303, r35304, r35305, r35306, r35307, r35308, r35309, r35310, r35311, r35312, r35313, r35314, r35315, r35316, r35317, r35318, r35319, r35320, r35321, r35322, r35323, r35324, r35325, r35326, r35327, r35328;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r35302);
        mpfr_init(r35303);
        mpfr_init(r35304);
        mpfr_init_set_str(r35305, "-1.5153768898317694e-23", 10, MPFR_RNDN);
        mpfr_init(r35306);
        mpfr_init(r35307);
        mpfr_init(r35308);
        mpfr_init(r35309);
        mpfr_init(r35310);
        mpfr_init_set_str(r35311, "1", 10, MPFR_RNDN);
        mpfr_init(r35312);
        mpfr_init(r35313);
        mpfr_init(r35314);
        mpfr_init(r35315);
        mpfr_init(r35316);
        mpfr_init(r35317);
        mpfr_init(r35318);
        mpfr_init(r35319);
        mpfr_init_set_str(r35320, "1/6", 10, MPFR_RNDN);
        mpfr_init(r35321);
        mpfr_init(r35322);
        mpfr_init(r35323);
        mpfr_init_set_str(r35324, "1/2", 10, MPFR_RNDN);
        mpfr_init(r35325);
        mpfr_init(r35326);
        mpfr_init(r35327);
        mpfr_init(r35328);
}

double f_fm(double a, double x) {
        mpfr_set_d(r35302, a, MPFR_RNDN);
        mpfr_set_d(r35303, x, MPFR_RNDN);
        mpfr_mul(r35304, r35302, r35303, MPFR_RNDN);
        ;
        mpfr_set_si(r35306, mpfr_cmp(r35304, r35305) <= 0, MPFR_RNDN);
        mpfr_add(r35307, r35302, r35302, MPFR_RNDN);
        mpfr_mul(r35308, r35303, r35307, MPFR_RNDN);
        mpfr_exp(r35309, r35308, MPFR_RNDN);
        mpfr_exp(r35310, r35304, MPFR_RNDN);
        ;
        mpfr_add(r35312, r35310, r35311, MPFR_RNDN);
        mpfr_div(r35313, r35309, r35312, MPFR_RNDN);
        mpfr_add(r35314, r35311, r35310, MPFR_RNDN);
        mpfr_div(r35315, r35311, r35314, MPFR_RNDN);
        mpfr_sub(r35316, r35313, r35315, MPFR_RNDN);
        mpfr_mul(r35317, r35302, r35302, MPFR_RNDN); mpfr_mul(r35317, r35317, r35302, MPFR_RNDN);
        mpfr_mul(r35318, r35303, r35303, MPFR_RNDN); mpfr_mul(r35318, r35318, r35303, MPFR_RNDN);
        mpfr_mul(r35319, r35317, r35318, MPFR_RNDN);
        ;
        mpfr_mul(r35321, r35319, r35320, MPFR_RNDN);
        mpfr_mul(r35322, r35303, r35302, MPFR_RNDN);
        mpfr_add(r35323, r35321, r35322, MPFR_RNDN);
        ;
        mpfr_sqr(r35325, r35322, MPFR_RNDN);
        mpfr_mul(r35326, r35324, r35325, MPFR_RNDN);
        mpfr_add(r35327, r35323, r35326, MPFR_RNDN);
        if (mpfr_get_si(r35306, MPFR_RNDN)) { mpfr_set(r35328, r35316, MPFR_RNDN); } else { mpfr_set(r35328, r35327, MPFR_RNDN); };
        return mpfr_get_d(r35328, MPFR_RNDN);
}

static mpfr_t r35329, r35330, r35331, r35332, r35333, r35334, r35335, r35336, r35337, r35338, r35339, r35340, r35341, r35342, r35343, r35344, r35345, r35346, r35347, r35348, r35349, r35350, r35351, r35352, r35353, r35354, r35355;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r35329);
        mpfr_init(r35330);
        mpfr_init(r35331);
        mpfr_init_set_str(r35332, "-1.5153768898317694e-23", 10, MPFR_RNDN);
        mpfr_init(r35333);
        mpfr_init(r35334);
        mpfr_init(r35335);
        mpfr_init(r35336);
        mpfr_init(r35337);
        mpfr_init_set_str(r35338, "1", 10, MPFR_RNDN);
        mpfr_init(r35339);
        mpfr_init(r35340);
        mpfr_init(r35341);
        mpfr_init(r35342);
        mpfr_init(r35343);
        mpfr_init(r35344);
        mpfr_init(r35345);
        mpfr_init(r35346);
        mpfr_init_set_str(r35347, "1/6", 10, MPFR_RNDN);
        mpfr_init(r35348);
        mpfr_init(r35349);
        mpfr_init(r35350);
        mpfr_init_set_str(r35351, "1/2", 10, MPFR_RNDN);
        mpfr_init(r35352);
        mpfr_init(r35353);
        mpfr_init(r35354);
        mpfr_init(r35355);
}

double f_dm(double a, double x) {
        mpfr_set_d(r35329, a, MPFR_RNDN);
        mpfr_set_d(r35330, x, MPFR_RNDN);
        mpfr_mul(r35331, r35329, r35330, MPFR_RNDN);
        ;
        mpfr_set_si(r35333, mpfr_cmp(r35331, r35332) <= 0, MPFR_RNDN);
        mpfr_add(r35334, r35329, r35329, MPFR_RNDN);
        mpfr_mul(r35335, r35330, r35334, MPFR_RNDN);
        mpfr_exp(r35336, r35335, MPFR_RNDN);
        mpfr_exp(r35337, r35331, MPFR_RNDN);
        ;
        mpfr_add(r35339, r35337, r35338, MPFR_RNDN);
        mpfr_div(r35340, r35336, r35339, MPFR_RNDN);
        mpfr_add(r35341, r35338, r35337, MPFR_RNDN);
        mpfr_div(r35342, r35338, r35341, MPFR_RNDN);
        mpfr_sub(r35343, r35340, r35342, MPFR_RNDN);
        mpfr_mul(r35344, r35329, r35329, MPFR_RNDN); mpfr_mul(r35344, r35344, r35329, MPFR_RNDN);
        mpfr_mul(r35345, r35330, r35330, MPFR_RNDN); mpfr_mul(r35345, r35345, r35330, MPFR_RNDN);
        mpfr_mul(r35346, r35344, r35345, MPFR_RNDN);
        ;
        mpfr_mul(r35348, r35346, r35347, MPFR_RNDN);
        mpfr_mul(r35349, r35330, r35329, MPFR_RNDN);
        mpfr_add(r35350, r35348, r35349, MPFR_RNDN);
        ;
        mpfr_sqr(r35352, r35349, MPFR_RNDN);
        mpfr_mul(r35353, r35351, r35352, MPFR_RNDN);
        mpfr_add(r35354, r35350, r35353, MPFR_RNDN);
        if (mpfr_get_si(r35333, MPFR_RNDN)) { mpfr_set(r35355, r35343, MPFR_RNDN); } else { mpfr_set(r35355, r35354, MPFR_RNDN); };
        return mpfr_get_d(r35355, MPFR_RNDN);
}

