#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "expq2 (section 3.11)";

double f_if(float x) {
        float r10549 = x;
        float r10550 = exp(r10549);
        float r10551 = 1;
        float r10552 = r10550 - r10551;
        float r10553 = r10550 / r10552;
        return r10553;
}

double f_id(double x) {
        double r10554 = x;
        double r10555 = exp(r10554);
        double r10556 = 1;
        double r10557 = r10555 - r10556;
        double r10558 = r10555 / r10557;
        return r10558;
}


double f_of(float x) {
        float r10559 = x;
        float r10560 = exp(r10559);
        float r10561 = expm1(r10559);
        float r10562 = r10560 / r10561;
        return r10562;
}

double f_od(double x) {
        double r10563 = x;
        double r10564 = exp(r10563);
        double r10565 = expm1(r10563);
        double r10566 = r10564 / r10565;
        return r10566;
}

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 r10567, r10568, r10569, r10570, r10571;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10567);
        mpfr_init(r10568);
        mpfr_init_set_str(r10569, "1", 10, MPFR_RNDN);
        mpfr_init(r10570);
        mpfr_init(r10571);
}

double f_im(double x) {
        mpfr_set_d(r10567, x, MPFR_RNDN);
        mpfr_exp(r10568, r10567, MPFR_RNDN);
        ;
        mpfr_sub(r10570, r10568, r10569, MPFR_RNDN);
        mpfr_div(r10571, r10568, r10570, MPFR_RNDN);
        return mpfr_get_d(r10571, MPFR_RNDN);
}

static mpfr_t r10572, r10573, r10574, r10575;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10572);
        mpfr_init(r10573);
        mpfr_init(r10574);
        mpfr_init(r10575);
}

double f_fm(double x) {
        mpfr_set_d(r10572, x, MPFR_RNDN);
        mpfr_exp(r10573, r10572, MPFR_RNDN);
        mpfr_expm1(r10574, r10572, MPFR_RNDN);
        mpfr_div(r10575, r10573, r10574, MPFR_RNDN);
        return mpfr_get_d(r10575, MPFR_RNDN);
}

static mpfr_t r10576, r10577, r10578, r10579;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10576);
        mpfr_init(r10577);
        mpfr_init(r10578);
        mpfr_init(r10579);
}

double f_dm(double x) {
        mpfr_set_d(r10576, x, MPFR_RNDN);
        mpfr_exp(r10577, r10576, MPFR_RNDN);
        mpfr_expm1(r10578, r10576, MPFR_RNDN);
        mpfr_div(r10579, r10577, r10578, MPFR_RNDN);
        return mpfr_get_d(r10579, MPFR_RNDN);
}

