#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 r39375 = x;
        float r39376 = exp(r39375);
        float r39377 = 1;
        float r39378 = r39376 - r39377;
        float r39379 = r39376 / r39378;
        return r39379;
}

double f_id(double x) {
        double r39380 = x;
        double r39381 = exp(r39380);
        double r39382 = 1;
        double r39383 = r39381 - r39382;
        double r39384 = r39381 / r39383;
        return r39384;
}


double f_of(float x) {
        float r39385 = x;
        float r39386 = -3.979550813088296e-22;
        bool r39387 = r39385 <= r39386;
        float r39388 = 1;
        float r39389 = -r39385;
        float r39390 = exp(r39389);
        float r39391 = r39388 - r39390;
        float r39392 = r39388 / r39391;
        float r39393 = 0.802860764679358;
        bool r39394 = r39385 <= r39393;
        float r39395 = 1/2;
        float r39396 = r39388 / r39385;
        float r39397 = 1/12;
        float r39398 = r39397 * r39385;
        float r39399 = r39396 + r39398;
        float r39400 = r39395 + r39399;
        float r39401 = r39394 ? r39400 : r39392;
        float r39402 = r39387 ? r39392 : r39401;
        return r39402;
}

double f_od(double x) {
        double r39403 = x;
        double r39404 = -3.979550813088296e-22;
        bool r39405 = r39403 <= r39404;
        double r39406 = 1;
        double r39407 = -r39403;
        double r39408 = exp(r39407);
        double r39409 = r39406 - r39408;
        double r39410 = r39406 / r39409;
        double r39411 = 0.802860764679358;
        bool r39412 = r39403 <= r39411;
        double r39413 = 1/2;
        double r39414 = r39406 / r39403;
        double r39415 = 1/12;
        double r39416 = r39415 * r39403;
        double r39417 = r39414 + r39416;
        double r39418 = r39413 + r39417;
        double r39419 = r39412 ? r39418 : r39410;
        double r39420 = r39405 ? r39410 : r39419;
        return r39420;
}

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 r39421, r39422, r39423, r39424, r39425;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39421);
        mpfr_init(r39422);
        mpfr_init_set_str(r39423, "1", 10, MPFR_RNDN);
        mpfr_init(r39424);
        mpfr_init(r39425);
}

double f_im(double x) {
        mpfr_set_d(r39421, x, MPFR_RNDN);
        mpfr_exp(r39422, r39421, MPFR_RNDN);
        ;
        mpfr_sub(r39424, r39422, r39423, MPFR_RNDN);
        mpfr_div(r39425, r39422, r39424, MPFR_RNDN);
        return mpfr_get_d(r39425, MPFR_RNDN);
}

static mpfr_t r39426, r39427, r39428, r39429, r39430, r39431, r39432, r39433, r39434, r39435, r39436, r39437, r39438, r39439, r39440, r39441, r39442, r39443;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39426);
        mpfr_init_set_str(r39427, "-3.979550813088296e-22", 10, MPFR_RNDN);
        mpfr_init(r39428);
        mpfr_init_set_str(r39429, "1", 10, MPFR_RNDN);
        mpfr_init(r39430);
        mpfr_init(r39431);
        mpfr_init(r39432);
        mpfr_init(r39433);
        mpfr_init_set_str(r39434, "0.802860764679358", 10, MPFR_RNDN);
        mpfr_init(r39435);
        mpfr_init_set_str(r39436, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39437);
        mpfr_init_set_str(r39438, "1/12", 10, MPFR_RNDN);
        mpfr_init(r39439);
        mpfr_init(r39440);
        mpfr_init(r39441);
        mpfr_init(r39442);
        mpfr_init(r39443);
}

double f_fm(double x) {
        mpfr_set_d(r39426, x, MPFR_RNDN);
        ;
        mpfr_set_si(r39428, mpfr_cmp(r39426, r39427) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r39430, r39426, MPFR_RNDN);
        mpfr_exp(r39431, r39430, MPFR_RNDN);
        mpfr_sub(r39432, r39429, r39431, MPFR_RNDN);
        mpfr_div(r39433, r39429, r39432, MPFR_RNDN);
        ;
        mpfr_set_si(r39435, mpfr_cmp(r39426, r39434) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r39437, r39429, r39426, MPFR_RNDN);
        ;
        mpfr_mul(r39439, r39438, r39426, MPFR_RNDN);
        mpfr_add(r39440, r39437, r39439, MPFR_RNDN);
        mpfr_add(r39441, r39436, r39440, MPFR_RNDN);
        if (mpfr_get_si(r39435, MPFR_RNDN)) { mpfr_set(r39442, r39441, MPFR_RNDN); } else { mpfr_set(r39442, r39433, MPFR_RNDN); };
        if (mpfr_get_si(r39428, MPFR_RNDN)) { mpfr_set(r39443, r39433, MPFR_RNDN); } else { mpfr_set(r39443, r39442, MPFR_RNDN); };
        return mpfr_get_d(r39443, MPFR_RNDN);
}

static mpfr_t r39444, r39445, r39446, r39447, r39448, r39449, r39450, r39451, r39452, r39453, r39454, r39455, r39456, r39457, r39458, r39459, r39460, r39461;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39444);
        mpfr_init_set_str(r39445, "-3.979550813088296e-22", 10, MPFR_RNDN);
        mpfr_init(r39446);
        mpfr_init_set_str(r39447, "1", 10, MPFR_RNDN);
        mpfr_init(r39448);
        mpfr_init(r39449);
        mpfr_init(r39450);
        mpfr_init(r39451);
        mpfr_init_set_str(r39452, "0.802860764679358", 10, MPFR_RNDN);
        mpfr_init(r39453);
        mpfr_init_set_str(r39454, "1/2", 10, MPFR_RNDN);
        mpfr_init(r39455);
        mpfr_init_set_str(r39456, "1/12", 10, MPFR_RNDN);
        mpfr_init(r39457);
        mpfr_init(r39458);
        mpfr_init(r39459);
        mpfr_init(r39460);
        mpfr_init(r39461);
}

double f_dm(double x) {
        mpfr_set_d(r39444, x, MPFR_RNDN);
        ;
        mpfr_set_si(r39446, mpfr_cmp(r39444, r39445) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r39448, r39444, MPFR_RNDN);
        mpfr_exp(r39449, r39448, MPFR_RNDN);
        mpfr_sub(r39450, r39447, r39449, MPFR_RNDN);
        mpfr_div(r39451, r39447, r39450, MPFR_RNDN);
        ;
        mpfr_set_si(r39453, mpfr_cmp(r39444, r39452) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r39455, r39447, r39444, MPFR_RNDN);
        ;
        mpfr_mul(r39457, r39456, r39444, MPFR_RNDN);
        mpfr_add(r39458, r39455, r39457, MPFR_RNDN);
        mpfr_add(r39459, r39454, r39458, MPFR_RNDN);
        if (mpfr_get_si(r39453, MPFR_RNDN)) { mpfr_set(r39460, r39459, MPFR_RNDN); } else { mpfr_set(r39460, r39451, MPFR_RNDN); };
        if (mpfr_get_si(r39446, MPFR_RNDN)) { mpfr_set(r39461, r39451, MPFR_RNDN); } else { mpfr_set(r39461, r39460, MPFR_RNDN); };
        return mpfr_get_d(r39461, MPFR_RNDN);
}

