#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 r4417200 = a;
        float r4417201 = x;
        float r4417202 = r4417200 * r4417201;
        float r4417203 = exp(r4417202);
        float r4417204 = 1;
        float r4417205 = r4417203 - r4417204;
        return r4417205;
}

double f_id(double a, double x) {
        double r4417206 = a;
        double r4417207 = x;
        double r4417208 = r4417206 * r4417207;
        double r4417209 = exp(r4417208);
        double r4417210 = 1;
        double r4417211 = r4417209 - r4417210;
        return r4417211;
}


double f_of(float a, float x) {
        float r4417212 = a;
        float r4417213 = x;
        float r4417214 = r4417212 * r4417213;
        float r4417215 = -1.3200301401961525e-10;
        bool r4417216 = r4417214 <= r4417215;
        float r4417217 = exp(r4417214);
        float r4417218 = 1;
        float r4417219 = r4417217 - r4417218;
        float r4417220 = exp(r4417219);
        float r4417221 = log(r4417220);
        float r4417222 = r4417213 * r4417212;
        float r4417223 = 1/2;
        float r4417224 = r4417223 * r4417222;
        float r4417225 = r4417222 * r4417224;
        float r4417226 = r4417222 + r4417225;
        float r4417227 = r4417216 ? r4417221 : r4417226;
        return r4417227;
}

double f_od(double a, double x) {
        double r4417228 = a;
        double r4417229 = x;
        double r4417230 = r4417228 * r4417229;
        double r4417231 = -1.3200301401961525e-10;
        bool r4417232 = r4417230 <= r4417231;
        double r4417233 = exp(r4417230);
        double r4417234 = 1;
        double r4417235 = r4417233 - r4417234;
        double r4417236 = exp(r4417235);
        double r4417237 = log(r4417236);
        double r4417238 = r4417229 * r4417228;
        double r4417239 = 1/2;
        double r4417240 = r4417239 * r4417238;
        double r4417241 = r4417238 * r4417240;
        double r4417242 = r4417238 + r4417241;
        double r4417243 = r4417232 ? r4417237 : r4417242;
        return r4417243;
}

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 r4417244, r4417245, r4417246, r4417247, r4417248, r4417249;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4417244);
        mpfr_init(r4417245);
        mpfr_init(r4417246);
        mpfr_init(r4417247);
        mpfr_init_set_str(r4417248, "1", 10, MPFR_RNDN);
        mpfr_init(r4417249);
}

double f_im(double a, double x) {
        mpfr_set_d(r4417244, a, MPFR_RNDN);
        mpfr_set_d(r4417245, x, MPFR_RNDN);
        mpfr_mul(r4417246, r4417244, r4417245, MPFR_RNDN);
        mpfr_exp(r4417247, r4417246, MPFR_RNDN);
        ;
        mpfr_sub(r4417249, r4417247, r4417248, MPFR_RNDN);
        return mpfr_get_d(r4417249, MPFR_RNDN);
}

static mpfr_t r4417250, r4417251, r4417252, r4417253, r4417254, r4417255, r4417256, r4417257, r4417258, r4417259, r4417260, r4417261, r4417262, r4417263, r4417264, r4417265;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4417250);
        mpfr_init(r4417251);
        mpfr_init(r4417252);
        mpfr_init_set_str(r4417253, "-1.3200301401961525e-10", 10, MPFR_RNDN);
        mpfr_init(r4417254);
        mpfr_init(r4417255);
        mpfr_init_set_str(r4417256, "1", 10, MPFR_RNDN);
        mpfr_init(r4417257);
        mpfr_init(r4417258);
        mpfr_init(r4417259);
        mpfr_init(r4417260);
        mpfr_init_set_str(r4417261, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4417262);
        mpfr_init(r4417263);
        mpfr_init(r4417264);
        mpfr_init(r4417265);
}

double f_fm(double a, double x) {
        mpfr_set_d(r4417250, a, MPFR_RNDN);
        mpfr_set_d(r4417251, x, MPFR_RNDN);
        mpfr_mul(r4417252, r4417250, r4417251, MPFR_RNDN);
        ;
        mpfr_set_si(r4417254, mpfr_cmp(r4417252, r4417253) <= 0, MPFR_RNDN);
        mpfr_exp(r4417255, r4417252, MPFR_RNDN);
        ;
        mpfr_sub(r4417257, r4417255, r4417256, MPFR_RNDN);
        mpfr_exp(r4417258, r4417257, MPFR_RNDN);
        mpfr_log(r4417259, r4417258, MPFR_RNDN);
        mpfr_mul(r4417260, r4417251, r4417250, MPFR_RNDN);
        ;
        mpfr_mul(r4417262, r4417261, r4417260, MPFR_RNDN);
        mpfr_mul(r4417263, r4417260, r4417262, MPFR_RNDN);
        mpfr_add(r4417264, r4417260, r4417263, MPFR_RNDN);
        if (mpfr_get_si(r4417254, MPFR_RNDN)) { mpfr_set(r4417265, r4417259, MPFR_RNDN); } else { mpfr_set(r4417265, r4417264, MPFR_RNDN); };
        return mpfr_get_d(r4417265, MPFR_RNDN);
}

static mpfr_t r4417266, r4417267, r4417268, r4417269, r4417270, r4417271, r4417272, r4417273, r4417274, r4417275, r4417276, r4417277, r4417278, r4417279, r4417280, r4417281;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4417266);
        mpfr_init(r4417267);
        mpfr_init(r4417268);
        mpfr_init_set_str(r4417269, "-1.3200301401961525e-10", 10, MPFR_RNDN);
        mpfr_init(r4417270);
        mpfr_init(r4417271);
        mpfr_init_set_str(r4417272, "1", 10, MPFR_RNDN);
        mpfr_init(r4417273);
        mpfr_init(r4417274);
        mpfr_init(r4417275);
        mpfr_init(r4417276);
        mpfr_init_set_str(r4417277, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4417278);
        mpfr_init(r4417279);
        mpfr_init(r4417280);
        mpfr_init(r4417281);
}

double f_dm(double a, double x) {
        mpfr_set_d(r4417266, a, MPFR_RNDN);
        mpfr_set_d(r4417267, x, MPFR_RNDN);
        mpfr_mul(r4417268, r4417266, r4417267, MPFR_RNDN);
        ;
        mpfr_set_si(r4417270, mpfr_cmp(r4417268, r4417269) <= 0, MPFR_RNDN);
        mpfr_exp(r4417271, r4417268, MPFR_RNDN);
        ;
        mpfr_sub(r4417273, r4417271, r4417272, MPFR_RNDN);
        mpfr_exp(r4417274, r4417273, MPFR_RNDN);
        mpfr_log(r4417275, r4417274, MPFR_RNDN);
        mpfr_mul(r4417276, r4417267, r4417266, MPFR_RNDN);
        ;
        mpfr_mul(r4417278, r4417277, r4417276, MPFR_RNDN);
        mpfr_mul(r4417279, r4417276, r4417278, MPFR_RNDN);
        mpfr_add(r4417280, r4417276, r4417279, MPFR_RNDN);
        if (mpfr_get_si(r4417270, MPFR_RNDN)) { mpfr_set(r4417281, r4417275, MPFR_RNDN); } else { mpfr_set(r4417281, r4417280, MPFR_RNDN); };
        return mpfr_get_d(r4417281, MPFR_RNDN);
}

