#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 r27309 = a;
        float r27310 = x;
        float r27311 = r27309 * r27310;
        float r27312 = exp(r27311);
        float r27313 = 1;
        float r27314 = r27312 - r27313;
        return r27314;
}

double f_id(double a, double x) {
        double r27315 = a;
        double r27316 = x;
        double r27317 = r27315 * r27316;
        double r27318 = exp(r27317);
        double r27319 = 1;
        double r27320 = r27318 - r27319;
        return r27320;
}


double f_of(float a, float x) {
        float r27321 = a;
        float r27322 = x;
        float r27323 = r27321 * r27322;
        float r27324 = exp(r27323);
        float r27325 = 1;
        float r27326 = r27324 - r27325;
        float r27327 = -4.690084979557152e-14;
        bool r27328 = r27326 <= r27327;
        float r27329 = cbrt(r27326);
        float r27330 = r27329 * r27329;
        float r27331 = r27330 * r27329;
        float r27332 = r27323 * r27323;
        float r27333 = 1/6;
        float r27334 = r27323 * r27333;
        float r27335 = 1/2;
        float r27336 = r27334 + r27335;
        float r27337 = r27332 * r27336;
        float r27338 = r27337 + r27323;
        float r27339 = r27328 ? r27331 : r27338;
        return r27339;
}

double f_od(double a, double x) {
        double r27340 = a;
        double r27341 = x;
        double r27342 = r27340 * r27341;
        double r27343 = exp(r27342);
        double r27344 = 1;
        double r27345 = r27343 - r27344;
        double r27346 = -4.690084979557152e-14;
        bool r27347 = r27345 <= r27346;
        double r27348 = cbrt(r27345);
        double r27349 = r27348 * r27348;
        double r27350 = r27349 * r27348;
        double r27351 = r27342 * r27342;
        double r27352 = 1/6;
        double r27353 = r27342 * r27352;
        double r27354 = 1/2;
        double r27355 = r27353 + r27354;
        double r27356 = r27351 * r27355;
        double r27357 = r27356 + r27342;
        double r27358 = r27347 ? r27350 : r27357;
        return r27358;
}

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 r27359, r27360, r27361, r27362, r27363, r27364;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27359);
        mpfr_init(r27360);
        mpfr_init(r27361);
        mpfr_init(r27362);
        mpfr_init_set_str(r27363, "1", 10, MPFR_RNDN);
        mpfr_init(r27364);
}

double f_im(double a, double x) {
        mpfr_set_d(r27359, a, MPFR_RNDN);
        mpfr_set_d(r27360, x, MPFR_RNDN);
        mpfr_mul(r27361, r27359, r27360, MPFR_RNDN);
        mpfr_exp(r27362, r27361, MPFR_RNDN);
        ;
        mpfr_sub(r27364, r27362, r27363, MPFR_RNDN);
        return mpfr_get_d(r27364, MPFR_RNDN);
}

static mpfr_t r27365, r27366, r27367, r27368, r27369, r27370, r27371, r27372, r27373, r27374, r27375, r27376, r27377, r27378, r27379, r27380, r27381, r27382, r27383;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27365);
        mpfr_init(r27366);
        mpfr_init(r27367);
        mpfr_init(r27368);
        mpfr_init_set_str(r27369, "1", 10, MPFR_RNDN);
        mpfr_init(r27370);
        mpfr_init_set_str(r27371, "-4.690084979557152e-14", 10, MPFR_RNDN);
        mpfr_init(r27372);
        mpfr_init(r27373);
        mpfr_init(r27374);
        mpfr_init(r27375);
        mpfr_init(r27376);
        mpfr_init_set_str(r27377, "1/6", 10, MPFR_RNDN);
        mpfr_init(r27378);
        mpfr_init_set_str(r27379, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27380);
        mpfr_init(r27381);
        mpfr_init(r27382);
        mpfr_init(r27383);
}

double f_fm(double a, double x) {
        mpfr_set_d(r27365, a, MPFR_RNDN);
        mpfr_set_d(r27366, x, MPFR_RNDN);
        mpfr_mul(r27367, r27365, r27366, MPFR_RNDN);
        mpfr_exp(r27368, r27367, MPFR_RNDN);
        ;
        mpfr_sub(r27370, r27368, r27369, MPFR_RNDN);
        ;
        mpfr_set_si(r27372, mpfr_cmp(r27370, r27371) <= 0, MPFR_RNDN);
        mpfr_cbrt(r27373, r27370, MPFR_RNDN);
        mpfr_mul(r27374, r27373, r27373, MPFR_RNDN);
        mpfr_mul(r27375, r27374, r27373, MPFR_RNDN);
        mpfr_mul(r27376, r27367, r27367, MPFR_RNDN);
        ;
        mpfr_mul(r27378, r27367, r27377, MPFR_RNDN);
        ;
        mpfr_add(r27380, r27378, r27379, MPFR_RNDN);
        mpfr_mul(r27381, r27376, r27380, MPFR_RNDN);
        mpfr_add(r27382, r27381, r27367, MPFR_RNDN);
        if (mpfr_get_si(r27372, MPFR_RNDN)) { mpfr_set(r27383, r27375, MPFR_RNDN); } else { mpfr_set(r27383, r27382, MPFR_RNDN); };
        return mpfr_get_d(r27383, MPFR_RNDN);
}

static mpfr_t r27384, r27385, r27386, r27387, r27388, r27389, r27390, r27391, r27392, r27393, r27394, r27395, r27396, r27397, r27398, r27399, r27400, r27401, r27402;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27384);
        mpfr_init(r27385);
        mpfr_init(r27386);
        mpfr_init(r27387);
        mpfr_init_set_str(r27388, "1", 10, MPFR_RNDN);
        mpfr_init(r27389);
        mpfr_init_set_str(r27390, "-4.690084979557152e-14", 10, MPFR_RNDN);
        mpfr_init(r27391);
        mpfr_init(r27392);
        mpfr_init(r27393);
        mpfr_init(r27394);
        mpfr_init(r27395);
        mpfr_init_set_str(r27396, "1/6", 10, MPFR_RNDN);
        mpfr_init(r27397);
        mpfr_init_set_str(r27398, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27399);
        mpfr_init(r27400);
        mpfr_init(r27401);
        mpfr_init(r27402);
}

double f_dm(double a, double x) {
        mpfr_set_d(r27384, a, MPFR_RNDN);
        mpfr_set_d(r27385, x, MPFR_RNDN);
        mpfr_mul(r27386, r27384, r27385, MPFR_RNDN);
        mpfr_exp(r27387, r27386, MPFR_RNDN);
        ;
        mpfr_sub(r27389, r27387, r27388, MPFR_RNDN);
        ;
        mpfr_set_si(r27391, mpfr_cmp(r27389, r27390) <= 0, MPFR_RNDN);
        mpfr_cbrt(r27392, r27389, MPFR_RNDN);
        mpfr_mul(r27393, r27392, r27392, MPFR_RNDN);
        mpfr_mul(r27394, r27393, r27392, MPFR_RNDN);
        mpfr_mul(r27395, r27386, r27386, MPFR_RNDN);
        ;
        mpfr_mul(r27397, r27386, r27396, MPFR_RNDN);
        ;
        mpfr_add(r27399, r27397, r27398, MPFR_RNDN);
        mpfr_mul(r27400, r27395, r27399, MPFR_RNDN);
        mpfr_add(r27401, r27400, r27386, MPFR_RNDN);
        if (mpfr_get_si(r27391, MPFR_RNDN)) { mpfr_set(r27402, r27394, MPFR_RNDN); } else { mpfr_set(r27402, r27401, MPFR_RNDN); };
        return mpfr_get_d(r27402, MPFR_RNDN);
}

