#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 r39317 = a;
        float r39318 = x;
        float r39319 = r39317 * r39318;
        float r39320 = exp(r39319);
        float r39321 = 1;
        float r39322 = r39320 - r39321;
        return r39322;
}

double f_id(double a, double x) {
        double r39323 = a;
        double r39324 = x;
        double r39325 = r39323 * r39324;
        double r39326 = exp(r39325);
        double r39327 = 1;
        double r39328 = r39326 - r39327;
        return r39328;
}


double f_of(float a, float x) {
        float r39329 = a;
        float r39330 = x;
        float r39331 = r39329 * r39330;
        float r39332 = -1.4691043195228787e-06;
        bool r39333 = r39331 <= r39332;
        float r39334 = 2;
        float r39335 = 1;
        float r39336 = r39334 + r39335;
        float r39337 = r39330 * r39329;
        float r39338 = r39336 * r39337;
        float r39339 = exp(r39338);
        float r39340 = r39339 - r39335;
        float r39341 = exp(r39337);
        float r39342 = r39335 + r39341;
        float r39343 = exp(r39330);
        float r39344 = r39329 + r39329;
        float r39345 = pow(r39343, r39344);
        float r39346 = r39342 + r39345;
        float r39347 = r39340 / r39346;
        float r39348 = r39337 * r39337;
        float r39349 = 1/2;
        float r39350 = r39348 * r39349;
        float r39351 = r39350 + r39337;
        float r39352 = r39333 ? r39347 : r39351;
        return r39352;
}

double f_od(double a, double x) {
        double r39353 = a;
        double r39354 = x;
        double r39355 = r39353 * r39354;
        double r39356 = -1.4691043195228787e-06;
        bool r39357 = r39355 <= r39356;
        double r39358 = 2;
        double r39359 = 1;
        double r39360 = r39358 + r39359;
        double r39361 = r39354 * r39353;
        double r39362 = r39360 * r39361;
        double r39363 = exp(r39362);
        double r39364 = r39363 - r39359;
        double r39365 = exp(r39361);
        double r39366 = r39359 + r39365;
        double r39367 = exp(r39354);
        double r39368 = r39353 + r39353;
        double r39369 = pow(r39367, r39368);
        double r39370 = r39366 + r39369;
        double r39371 = r39364 / r39370;
        double r39372 = r39361 * r39361;
        double r39373 = 1/2;
        double r39374 = r39372 * r39373;
        double r39375 = r39374 + r39361;
        double r39376 = r39357 ? r39371 : r39375;
        return r39376;
}

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 r39377, r39378, r39379, r39380, r39381, r39382;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39377);
        mpfr_init(r39378);
        mpfr_init(r39379);
        mpfr_init(r39380);
        mpfr_init_set_str(r39381, "1", 10, MPFR_RNDN);
        mpfr_init(r39382);
}

double f_im(double a, double x) {
        mpfr_set_d(r39377, a, MPFR_RNDN);
        mpfr_set_d(r39378, x, MPFR_RNDN);
        mpfr_mul(r39379, r39377, r39378, MPFR_RNDN);
        mpfr_exp(r39380, r39379, MPFR_RNDN);
        ;
        mpfr_sub(r39382, r39380, r39381, MPFR_RNDN);
        return mpfr_get_d(r39382, MPFR_RNDN);
}

static mpfr_t r39383, r39384, r39385, r39386, r39387, r39388, r39389, r39390, r39391, r39392, r39393, r39394, r39395, r39396, r39397, r39398, r39399, r39400, r39401, r39402, r39403, r39404, r39405, r39406;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39383);
        mpfr_init(r39384);
        mpfr_init(r39385);
        mpfr_init_set_str(r39386, "-1.4691043195228787e-06", 10, MPFR_RNDN);
        mpfr_init(r39387);
        mpfr_init_set_str(r39388, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r39389, "1", 10, MPFR_RNDN);
        mpfr_init(r39390);
        mpfr_init(r39391);
        mpfr_init(r39392);
        mpfr_init(r39393);
        mpfr_init(r39394);
        mpfr_init(r39395);
        mpfr_init(r39396);
        mpfr_init(r39397);
        mpfr_init(r39398);
        mpfr_init(r39399);
        mpfr_init(r39400);
        mpfr_init(r39401);
        mpfr_init(r39402);
        mpfr_init_set_str(r39403, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39404);
        mpfr_init(r39405);
        mpfr_init(r39406);
}

double f_fm(double a, double x) {
        mpfr_set_d(r39383, a, MPFR_RNDN);
        mpfr_set_d(r39384, x, MPFR_RNDN);
        mpfr_mul(r39385, r39383, r39384, MPFR_RNDN);
        ;
        mpfr_set_si(r39387, mpfr_cmp(r39385, r39386) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_add(r39390, r39388, r39389, MPFR_RNDN);
        mpfr_mul(r39391, r39384, r39383, MPFR_RNDN);
        mpfr_mul(r39392, r39390, r39391, MPFR_RNDN);
        mpfr_exp(r39393, r39392, MPFR_RNDN);
        mpfr_sub(r39394, r39393, r39389, MPFR_RNDN);
        mpfr_exp(r39395, r39391, MPFR_RNDN);
        mpfr_add(r39396, r39389, r39395, MPFR_RNDN);
        mpfr_exp(r39397, r39384, MPFR_RNDN);
        mpfr_add(r39398, r39383, r39383, MPFR_RNDN);
        mpfr_pow(r39399, r39397, r39398, MPFR_RNDN);
        mpfr_add(r39400, r39396, r39399, MPFR_RNDN);
        mpfr_div(r39401, r39394, r39400, MPFR_RNDN);
        mpfr_mul(r39402, r39391, r39391, MPFR_RNDN);
        ;
        mpfr_mul(r39404, r39402, r39403, MPFR_RNDN);
        mpfr_add(r39405, r39404, r39391, MPFR_RNDN);
        if (mpfr_get_si(r39387, MPFR_RNDN)) { mpfr_set(r39406, r39401, MPFR_RNDN); } else { mpfr_set(r39406, r39405, MPFR_RNDN); };
        return mpfr_get_d(r39406, MPFR_RNDN);
}

static mpfr_t r39407, r39408, r39409, r39410, r39411, r39412, r39413, r39414, r39415, r39416, r39417, r39418, r39419, r39420, r39421, r39422, r39423, r39424, r39425, r39426, r39427, r39428, r39429, r39430;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39407);
        mpfr_init(r39408);
        mpfr_init(r39409);
        mpfr_init_set_str(r39410, "-1.4691043195228787e-06", 10, MPFR_RNDN);
        mpfr_init(r39411);
        mpfr_init_set_str(r39412, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r39413, "1", 10, MPFR_RNDN);
        mpfr_init(r39414);
        mpfr_init(r39415);
        mpfr_init(r39416);
        mpfr_init(r39417);
        mpfr_init(r39418);
        mpfr_init(r39419);
        mpfr_init(r39420);
        mpfr_init(r39421);
        mpfr_init(r39422);
        mpfr_init(r39423);
        mpfr_init(r39424);
        mpfr_init(r39425);
        mpfr_init(r39426);
        mpfr_init_set_str(r39427, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39428);
        mpfr_init(r39429);
        mpfr_init(r39430);
}

double f_dm(double a, double x) {
        mpfr_set_d(r39407, a, MPFR_RNDN);
        mpfr_set_d(r39408, x, MPFR_RNDN);
        mpfr_mul(r39409, r39407, r39408, MPFR_RNDN);
        ;
        mpfr_set_si(r39411, mpfr_cmp(r39409, r39410) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_add(r39414, r39412, r39413, MPFR_RNDN);
        mpfr_mul(r39415, r39408, r39407, MPFR_RNDN);
        mpfr_mul(r39416, r39414, r39415, MPFR_RNDN);
        mpfr_exp(r39417, r39416, MPFR_RNDN);
        mpfr_sub(r39418, r39417, r39413, MPFR_RNDN);
        mpfr_exp(r39419, r39415, MPFR_RNDN);
        mpfr_add(r39420, r39413, r39419, MPFR_RNDN);
        mpfr_exp(r39421, r39408, MPFR_RNDN);
        mpfr_add(r39422, r39407, r39407, MPFR_RNDN);
        mpfr_pow(r39423, r39421, r39422, MPFR_RNDN);
        mpfr_add(r39424, r39420, r39423, MPFR_RNDN);
        mpfr_div(r39425, r39418, r39424, MPFR_RNDN);
        mpfr_mul(r39426, r39415, r39415, MPFR_RNDN);
        ;
        mpfr_mul(r39428, r39426, r39427, MPFR_RNDN);
        mpfr_add(r39429, r39428, r39415, MPFR_RNDN);
        if (mpfr_get_si(r39411, MPFR_RNDN)) { mpfr_set(r39430, r39425, MPFR_RNDN); } else { mpfr_set(r39430, r39429, MPFR_RNDN); };
        return mpfr_get_d(r39430, MPFR_RNDN);
}

