#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 r39674 = a;
        float r39675 = x;
        float r39676 = r39674 * r39675;
        float r39677 = exp(r39676);
        float r39678 = 1;
        float r39679 = r39677 - r39678;
        return r39679;
}

double f_id(double a, double x) {
        double r39680 = a;
        double r39681 = x;
        double r39682 = r39680 * r39681;
        double r39683 = exp(r39682);
        double r39684 = 1;
        double r39685 = r39683 - r39684;
        return r39685;
}


double f_of(float a, float x) {
        float r39686 = a;
        float r39687 = x;
        float r39688 = r39686 * r39687;
        float r39689 = -1.4384882105786329e-06;
        bool r39690 = r39688 <= r39689;
        float r39691 = exp(r39688);
        float r39692 = 1;
        float r39693 = r39691 - r39692;
        float r39694 = exp(r39693);
        float r39695 = log(r39694);
        float r39696 = r39687 * r39686;
        float r39697 = r39696 * r39696;
        float r39698 = 1/2;
        float r39699 = r39697 * r39698;
        float r39700 = r39699 + r39696;
        float r39701 = r39690 ? r39695 : r39700;
        return r39701;
}

double f_od(double a, double x) {
        double r39702 = a;
        double r39703 = x;
        double r39704 = r39702 * r39703;
        double r39705 = -1.4384882105786329e-06;
        bool r39706 = r39704 <= r39705;
        double r39707 = exp(r39704);
        double r39708 = 1;
        double r39709 = r39707 - r39708;
        double r39710 = exp(r39709);
        double r39711 = log(r39710);
        double r39712 = r39703 * r39702;
        double r39713 = r39712 * r39712;
        double r39714 = 1/2;
        double r39715 = r39713 * r39714;
        double r39716 = r39715 + r39712;
        double r39717 = r39706 ? r39711 : r39716;
        return r39717;
}

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 r39718, r39719, r39720, r39721, r39722, r39723;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39718);
        mpfr_init(r39719);
        mpfr_init(r39720);
        mpfr_init(r39721);
        mpfr_init_set_str(r39722, "1", 10, MPFR_RNDN);
        mpfr_init(r39723);
}

double f_im(double a, double x) {
        mpfr_set_d(r39718, a, MPFR_RNDN);
        mpfr_set_d(r39719, x, MPFR_RNDN);
        mpfr_mul(r39720, r39718, r39719, MPFR_RNDN);
        mpfr_exp(r39721, r39720, MPFR_RNDN);
        ;
        mpfr_sub(r39723, r39721, r39722, MPFR_RNDN);
        return mpfr_get_d(r39723, MPFR_RNDN);
}

static mpfr_t r39724, r39725, r39726, r39727, r39728, r39729, r39730, r39731, r39732, r39733, r39734, r39735, r39736, r39737, r39738, r39739;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39724);
        mpfr_init(r39725);
        mpfr_init(r39726);
        mpfr_init_set_str(r39727, "-1.4384882105786329e-06", 10, MPFR_RNDN);
        mpfr_init(r39728);
        mpfr_init(r39729);
        mpfr_init_set_str(r39730, "1", 10, MPFR_RNDN);
        mpfr_init(r39731);
        mpfr_init(r39732);
        mpfr_init(r39733);
        mpfr_init(r39734);
        mpfr_init(r39735);
        mpfr_init_set_str(r39736, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39737);
        mpfr_init(r39738);
        mpfr_init(r39739);
}

double f_fm(double a, double x) {
        mpfr_set_d(r39724, a, MPFR_RNDN);
        mpfr_set_d(r39725, x, MPFR_RNDN);
        mpfr_mul(r39726, r39724, r39725, MPFR_RNDN);
        ;
        mpfr_set_si(r39728, mpfr_cmp(r39726, r39727) <= 0, MPFR_RNDN);
        mpfr_exp(r39729, r39726, MPFR_RNDN);
        ;
        mpfr_sub(r39731, r39729, r39730, MPFR_RNDN);
        mpfr_exp(r39732, r39731, MPFR_RNDN);
        mpfr_log(r39733, r39732, MPFR_RNDN);
        mpfr_mul(r39734, r39725, r39724, MPFR_RNDN);
        mpfr_mul(r39735, r39734, r39734, MPFR_RNDN);
        ;
        mpfr_mul(r39737, r39735, r39736, MPFR_RNDN);
        mpfr_add(r39738, r39737, r39734, MPFR_RNDN);
        if (mpfr_get_si(r39728, MPFR_RNDN)) { mpfr_set(r39739, r39733, MPFR_RNDN); } else { mpfr_set(r39739, r39738, MPFR_RNDN); };
        return mpfr_get_d(r39739, MPFR_RNDN);
}

static mpfr_t r39740, r39741, r39742, r39743, r39744, r39745, r39746, r39747, r39748, r39749, r39750, r39751, r39752, r39753, r39754, r39755;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39740);
        mpfr_init(r39741);
        mpfr_init(r39742);
        mpfr_init_set_str(r39743, "-1.4384882105786329e-06", 10, MPFR_RNDN);
        mpfr_init(r39744);
        mpfr_init(r39745);
        mpfr_init_set_str(r39746, "1", 10, MPFR_RNDN);
        mpfr_init(r39747);
        mpfr_init(r39748);
        mpfr_init(r39749);
        mpfr_init(r39750);
        mpfr_init(r39751);
        mpfr_init_set_str(r39752, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39753);
        mpfr_init(r39754);
        mpfr_init(r39755);
}

double f_dm(double a, double x) {
        mpfr_set_d(r39740, a, MPFR_RNDN);
        mpfr_set_d(r39741, x, MPFR_RNDN);
        mpfr_mul(r39742, r39740, r39741, MPFR_RNDN);
        ;
        mpfr_set_si(r39744, mpfr_cmp(r39742, r39743) <= 0, MPFR_RNDN);
        mpfr_exp(r39745, r39742, MPFR_RNDN);
        ;
        mpfr_sub(r39747, r39745, r39746, MPFR_RNDN);
        mpfr_exp(r39748, r39747, MPFR_RNDN);
        mpfr_log(r39749, r39748, MPFR_RNDN);
        mpfr_mul(r39750, r39741, r39740, MPFR_RNDN);
        mpfr_mul(r39751, r39750, r39750, MPFR_RNDN);
        ;
        mpfr_mul(r39753, r39751, r39752, MPFR_RNDN);
        mpfr_add(r39754, r39753, r39750, MPFR_RNDN);
        if (mpfr_get_si(r39744, MPFR_RNDN)) { mpfr_set(r39755, r39749, MPFR_RNDN); } else { mpfr_set(r39755, r39754, MPFR_RNDN); };
        return mpfr_get_d(r39755, MPFR_RNDN);
}

