#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 r10600 = a;
        float r10601 = x;
        float r10602 = r10600 * r10601;
        float r10603 = exp(r10602);
        float r10604 = 1;
        float r10605 = r10603 - r10604;
        return r10605;
}

double f_id(double a, double x) {
        double r10606 = a;
        double r10607 = x;
        double r10608 = r10606 * r10607;
        double r10609 = exp(r10608);
        double r10610 = 1;
        double r10611 = r10609 - r10610;
        return r10611;
}


double f_of(float a, float x) {
        float r10612 = a;
        float r10613 = x;
        float r10614 = r10612 * r10613;
        float r10615 = expm1(r10614);
        return r10615;
}

double f_od(double a, double x) {
        double r10616 = a;
        double r10617 = x;
        double r10618 = r10616 * r10617;
        double r10619 = expm1(r10618);
        return r10619;
}

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 r10620, r10621, r10622, r10623, r10624, r10625;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10620);
        mpfr_init(r10621);
        mpfr_init(r10622);
        mpfr_init(r10623);
        mpfr_init_set_str(r10624, "1", 10, MPFR_RNDN);
        mpfr_init(r10625);
}

double f_im(double a, double x) {
        mpfr_set_d(r10620, a, MPFR_RNDN);
        mpfr_set_d(r10621, x, MPFR_RNDN);
        mpfr_mul(r10622, r10620, r10621, MPFR_RNDN);
        mpfr_exp(r10623, r10622, MPFR_RNDN);
        ;
        mpfr_sub(r10625, r10623, r10624, MPFR_RNDN);
        return mpfr_get_d(r10625, MPFR_RNDN);
}

static mpfr_t r10626, r10627, r10628, r10629;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10626);
        mpfr_init(r10627);
        mpfr_init(r10628);
        mpfr_init(r10629);
}

double f_fm(double a, double x) {
        mpfr_set_d(r10626, a, MPFR_RNDN);
        mpfr_set_d(r10627, x, MPFR_RNDN);
        mpfr_mul(r10628, r10626, r10627, MPFR_RNDN);
        mpfr_expm1(r10629, r10628, MPFR_RNDN);
        return mpfr_get_d(r10629, MPFR_RNDN);
}

static mpfr_t r10630, r10631, r10632, r10633;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10630);
        mpfr_init(r10631);
        mpfr_init(r10632);
        mpfr_init(r10633);
}

double f_dm(double a, double x) {
        mpfr_set_d(r10630, a, MPFR_RNDN);
        mpfr_set_d(r10631, x, MPFR_RNDN);
        mpfr_mul(r10632, r10630, r10631, MPFR_RNDN);
        mpfr_expm1(r10633, r10632, MPFR_RNDN);
        return mpfr_get_d(r10633, MPFR_RNDN);
}

