#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 r5181773 = x;
        float r5181774 = exp(r5181773);
        float r5181775 = 1.0f;
        float r5181776 = r5181774 - r5181775;
        float r5181777 = r5181774 / r5181776;
        return r5181777;
}

double f_id(double x) {
        double r5181778 = x;
        double r5181779 = exp(r5181778);
        double r5181780 = 1.0;
        double r5181781 = r5181779 - r5181780;
        double r5181782 = r5181779 / r5181781;
        return r5181782;
}


double f_of(float x) {
        float r5181783 = x;
        float r5181784 = -0.0004749914434913193f;
        bool r5181785 = r5181783 <= r5181784;
        float r5181786 = 1.0f;
        float r5181787 = -r5181783;
        float r5181788 = exp(r5181787);
        float r5181789 = r5181786 - r5181788;
        float r5181790 = r5181786 / r5181789;
        float r5181791 = 28.042920304023237f;
        bool r5181792 = r5181783 <= r5181791;
        float r5181793 = r5181786 / r5181783;
        float r5181794 = 0.5f;
        float r5181795 = 0.08333333333333333f;
        float r5181796 = r5181795 * r5181783;
        float r5181797 = r5181794 + r5181796;
        float r5181798 = r5181793 + r5181797;
        float r5181799 = r5181792 ? r5181798 : r5181790;
        float r5181800 = r5181785 ? r5181790 : r5181799;
        return r5181800;
}

double f_od(double x) {
        double r5181801 = x;
        double r5181802 = -0.0004749914434913193;
        bool r5181803 = r5181801 <= r5181802;
        double r5181804 = 1.0;
        double r5181805 = -r5181801;
        double r5181806 = exp(r5181805);
        double r5181807 = r5181804 - r5181806;
        double r5181808 = r5181804 / r5181807;
        double r5181809 = 28.042920304023237;
        bool r5181810 = r5181801 <= r5181809;
        double r5181811 = r5181804 / r5181801;
        double r5181812 = 0.5;
        double r5181813 = 0.08333333333333333;
        double r5181814 = r5181813 * r5181801;
        double r5181815 = r5181812 + r5181814;
        double r5181816 = r5181811 + r5181815;
        double r5181817 = r5181810 ? r5181816 : r5181808;
        double r5181818 = r5181803 ? r5181808 : r5181817;
        return r5181818;
}

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 r5181819, r5181820, r5181821, r5181822, r5181823;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r5181819);
        mpfr_init(r5181820);
        mpfr_init_set_str(r5181821, "1", 10, MPFR_RNDN);
        mpfr_init(r5181822);
        mpfr_init(r5181823);
}

double f_im(double x) {
        mpfr_set_d(r5181819, x, MPFR_RNDN);
        mpfr_exp(r5181820, r5181819, MPFR_RNDN);
        ;
        mpfr_sub(r5181822, r5181820, r5181821, MPFR_RNDN);
        mpfr_div(r5181823, r5181820, r5181822, MPFR_RNDN);
        return mpfr_get_d(r5181823, MPFR_RNDN);
}

static mpfr_t r5181824, r5181825, r5181826, r5181827, r5181828, r5181829, r5181830, r5181831, r5181832, r5181833, r5181834, r5181835, r5181836, r5181837, r5181838, r5181839, r5181840, r5181841;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r5181824);
        mpfr_init_set_str(r5181825, "-0.0004749914434913193", 10, MPFR_RNDN);
        mpfr_init(r5181826);
        mpfr_init_set_str(r5181827, "1", 10, MPFR_RNDN);
        mpfr_init(r5181828);
        mpfr_init(r5181829);
        mpfr_init(r5181830);
        mpfr_init(r5181831);
        mpfr_init_set_str(r5181832, "28.042920304023237", 10, MPFR_RNDN);
        mpfr_init(r5181833);
        mpfr_init(r5181834);
        mpfr_init_set_str(r5181835, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5181836, "1/12", 10, MPFR_RNDN);
        mpfr_init(r5181837);
        mpfr_init(r5181838);
        mpfr_init(r5181839);
        mpfr_init(r5181840);
        mpfr_init(r5181841);
}

double f_fm(double x) {
        mpfr_set_d(r5181824, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5181826, mpfr_cmp(r5181824, r5181825) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r5181828, r5181824, MPFR_RNDN);
        mpfr_exp(r5181829, r5181828, MPFR_RNDN);
        mpfr_sub(r5181830, r5181827, r5181829, MPFR_RNDN);
        mpfr_div(r5181831, r5181827, r5181830, MPFR_RNDN);
        ;
        mpfr_set_si(r5181833, mpfr_cmp(r5181824, r5181832) <= 0, MPFR_RNDN);
        mpfr_div(r5181834, r5181827, r5181824, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r5181837, r5181836, r5181824, MPFR_RNDN);
        mpfr_add(r5181838, r5181835, r5181837, MPFR_RNDN);
        mpfr_add(r5181839, r5181834, r5181838, MPFR_RNDN);
        if (mpfr_get_si(r5181833, MPFR_RNDN)) { mpfr_set(r5181840, r5181839, MPFR_RNDN); } else { mpfr_set(r5181840, r5181831, MPFR_RNDN); };
        if (mpfr_get_si(r5181826, MPFR_RNDN)) { mpfr_set(r5181841, r5181831, MPFR_RNDN); } else { mpfr_set(r5181841, r5181840, MPFR_RNDN); };
        return mpfr_get_d(r5181841, MPFR_RNDN);
}

static mpfr_t r5181842, r5181843, r5181844, r5181845, r5181846, r5181847, r5181848, r5181849, r5181850, r5181851, r5181852, r5181853, r5181854, r5181855, r5181856, r5181857, r5181858, r5181859;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r5181842);
        mpfr_init_set_str(r5181843, "-0.0004749914434913193", 10, MPFR_RNDN);
        mpfr_init(r5181844);
        mpfr_init_set_str(r5181845, "1", 10, MPFR_RNDN);
        mpfr_init(r5181846);
        mpfr_init(r5181847);
        mpfr_init(r5181848);
        mpfr_init(r5181849);
        mpfr_init_set_str(r5181850, "28.042920304023237", 10, MPFR_RNDN);
        mpfr_init(r5181851);
        mpfr_init(r5181852);
        mpfr_init_set_str(r5181853, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5181854, "1/12", 10, MPFR_RNDN);
        mpfr_init(r5181855);
        mpfr_init(r5181856);
        mpfr_init(r5181857);
        mpfr_init(r5181858);
        mpfr_init(r5181859);
}

double f_dm(double x) {
        mpfr_set_d(r5181842, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5181844, mpfr_cmp(r5181842, r5181843) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r5181846, r5181842, MPFR_RNDN);
        mpfr_exp(r5181847, r5181846, MPFR_RNDN);
        mpfr_sub(r5181848, r5181845, r5181847, MPFR_RNDN);
        mpfr_div(r5181849, r5181845, r5181848, MPFR_RNDN);
        ;
        mpfr_set_si(r5181851, mpfr_cmp(r5181842, r5181850) <= 0, MPFR_RNDN);
        mpfr_div(r5181852, r5181845, r5181842, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r5181855, r5181854, r5181842, MPFR_RNDN);
        mpfr_add(r5181856, r5181853, r5181855, MPFR_RNDN);
        mpfr_add(r5181857, r5181852, r5181856, MPFR_RNDN);
        if (mpfr_get_si(r5181851, MPFR_RNDN)) { mpfr_set(r5181858, r5181857, MPFR_RNDN); } else { mpfr_set(r5181858, r5181849, MPFR_RNDN); };
        if (mpfr_get_si(r5181844, MPFR_RNDN)) { mpfr_set(r5181859, r5181849, MPFR_RNDN); } else { mpfr_set(r5181859, r5181858, MPFR_RNDN); };
        return mpfr_get_d(r5181859, MPFR_RNDN);
}

