#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 r27176 = x;
        float r27177 = exp(r27176);
        float r27178 = 1;
        float r27179 = r27177 - r27178;
        float r27180 = r27177 / r27179;
        return r27180;
}

double f_id(double x) {
        double r27181 = x;
        double r27182 = exp(r27181);
        double r27183 = 1;
        double r27184 = r27182 - r27183;
        double r27185 = r27182 / r27184;
        return r27185;
}


double f_of(float x) {
        float r27186 = x;
        float r27187 = exp(r27186);
        float r27188 = expm1(r27186);
        float r27189 = r27187 / r27188;
        return r27189;
}

double f_od(double x) {
        double r27190 = x;
        double r27191 = exp(r27190);
        double r27192 = expm1(r27190);
        double r27193 = r27191 / r27192;
        return r27193;
}

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 r27194, r27195, r27196, r27197, r27198;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27194);
        mpfr_init(r27195);
        mpfr_init_set_str(r27196, "1", 10, MPFR_RNDN);
        mpfr_init(r27197);
        mpfr_init(r27198);
}

double f_im(double x) {
        mpfr_set_d(r27194, x, MPFR_RNDN);
        mpfr_exp(r27195, r27194, MPFR_RNDN);
        ;
        mpfr_sub(r27197, r27195, r27196, MPFR_RNDN);
        mpfr_div(r27198, r27195, r27197, MPFR_RNDN);
        return mpfr_get_d(r27198, MPFR_RNDN);
}

static mpfr_t r27199, r27200, r27201, r27202;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27199);
        mpfr_init(r27200);
        mpfr_init(r27201);
        mpfr_init(r27202);
}

double f_fm(double x) {
        mpfr_set_d(r27199, x, MPFR_RNDN);
        mpfr_exp(r27200, r27199, MPFR_RNDN);
        mpfr_expm1(r27201, r27199, MPFR_RNDN);
        mpfr_div(r27202, r27200, r27201, MPFR_RNDN);
        return mpfr_get_d(r27202, MPFR_RNDN);
}

static mpfr_t r27203, r27204, r27205, r27206;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27203);
        mpfr_init(r27204);
        mpfr_init(r27205);
        mpfr_init(r27206);
}

double f_dm(double x) {
        mpfr_set_d(r27203, x, MPFR_RNDN);
        mpfr_exp(r27204, r27203, MPFR_RNDN);
        mpfr_expm1(r27205, r27203, MPFR_RNDN);
        mpfr_div(r27206, r27204, r27205, MPFR_RNDN);
        return mpfr_get_d(r27206, MPFR_RNDN);
}

