#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 r6215735 = x;
        float r6215736 = exp(r6215735);
        float r6215737 = 1;
        float r6215738 = r6215736 - r6215737;
        float r6215739 = r6215736 / r6215738;
        return r6215739;
}

double f_id(double x) {
        double r6215740 = x;
        double r6215741 = exp(r6215740);
        double r6215742 = 1;
        double r6215743 = r6215741 - r6215742;
        double r6215744 = r6215741 / r6215743;
        return r6215744;
}


double f_of(float x) {
        float r6215745 = x;
        float r6215746 = -0.0020821440085700095;
        bool r6215747 = r6215745 <= r6215746;
        float r6215748 = exp(r6215745);
        float r6215749 = 1;
        float r6215750 = sqrt(r6215748);
        float r6215751 = r6215749 + r6215750;
        float r6215752 = r6215748 / r6215751;
        float r6215753 = r6215750 - r6215749;
        float r6215754 = r6215752 / r6215753;
        float r6215755 = 0.0018970338561144866;
        bool r6215756 = r6215745 <= r6215755;
        float r6215757 = 1/2;
        float r6215758 = 1/12;
        float r6215759 = r6215745 * r6215758;
        float r6215760 = r6215749 / r6215745;
        float r6215761 = r6215759 + r6215760;
        float r6215762 = r6215757 + r6215761;
        float r6215763 = -r6215745;
        float r6215764 = exp(r6215763);
        float r6215765 = r6215749 - r6215764;
        float r6215766 = r6215749 / r6215765;
        float r6215767 = r6215756 ? r6215762 : r6215766;
        float r6215768 = r6215747 ? r6215754 : r6215767;
        return r6215768;
}

double f_od(double x) {
        double r6215769 = x;
        double r6215770 = -0.0020821440085700095;
        bool r6215771 = r6215769 <= r6215770;
        double r6215772 = exp(r6215769);
        double r6215773 = 1;
        double r6215774 = sqrt(r6215772);
        double r6215775 = r6215773 + r6215774;
        double r6215776 = r6215772 / r6215775;
        double r6215777 = r6215774 - r6215773;
        double r6215778 = r6215776 / r6215777;
        double r6215779 = 0.0018970338561144866;
        bool r6215780 = r6215769 <= r6215779;
        double r6215781 = 1/2;
        double r6215782 = 1/12;
        double r6215783 = r6215769 * r6215782;
        double r6215784 = r6215773 / r6215769;
        double r6215785 = r6215783 + r6215784;
        double r6215786 = r6215781 + r6215785;
        double r6215787 = -r6215769;
        double r6215788 = exp(r6215787);
        double r6215789 = r6215773 - r6215788;
        double r6215790 = r6215773 / r6215789;
        double r6215791 = r6215780 ? r6215786 : r6215790;
        double r6215792 = r6215771 ? r6215778 : r6215791;
        return r6215792;
}

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 r6215793, r6215794, r6215795, r6215796, r6215797;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6215793);
        mpfr_init(r6215794);
        mpfr_init_set_str(r6215795, "1", 10, MPFR_RNDN);
        mpfr_init(r6215796);
        mpfr_init(r6215797);
}

double f_im(double x) {
        mpfr_set_d(r6215793, x, MPFR_RNDN);
        mpfr_exp(r6215794, r6215793, MPFR_RNDN);
        ;
        mpfr_sub(r6215796, r6215794, r6215795, MPFR_RNDN);
        mpfr_div(r6215797, r6215794, r6215796, MPFR_RNDN);
        return mpfr_get_d(r6215797, MPFR_RNDN);
}

static mpfr_t r6215798, r6215799, r6215800, r6215801, r6215802, r6215803, r6215804, r6215805, r6215806, r6215807, r6215808, r6215809, r6215810, r6215811, r6215812, r6215813, r6215814, r6215815, r6215816, r6215817, r6215818, r6215819, r6215820, r6215821;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6215798);
        mpfr_init_set_str(r6215799, "-0.0020821440085700095", 10, MPFR_RNDN);
        mpfr_init(r6215800);
        mpfr_init(r6215801);
        mpfr_init_set_str(r6215802, "1", 10, MPFR_RNDN);
        mpfr_init(r6215803);
        mpfr_init(r6215804);
        mpfr_init(r6215805);
        mpfr_init(r6215806);
        mpfr_init(r6215807);
        mpfr_init_set_str(r6215808, "0.0018970338561144866", 10, MPFR_RNDN);
        mpfr_init(r6215809);
        mpfr_init_set_str(r6215810, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r6215811, "1/12", 10, MPFR_RNDN);
        mpfr_init(r6215812);
        mpfr_init(r6215813);
        mpfr_init(r6215814);
        mpfr_init(r6215815);
        mpfr_init(r6215816);
        mpfr_init(r6215817);
        mpfr_init(r6215818);
        mpfr_init(r6215819);
        mpfr_init(r6215820);
        mpfr_init(r6215821);
}

double f_fm(double x) {
        mpfr_set_d(r6215798, x, MPFR_RNDN);
        ;
        mpfr_set_si(r6215800, mpfr_cmp(r6215798, r6215799) <= 0, MPFR_RNDN);
        mpfr_exp(r6215801, r6215798, MPFR_RNDN);
        ;
        mpfr_sqrt(r6215803, r6215801, MPFR_RNDN);
        mpfr_add(r6215804, r6215802, r6215803, MPFR_RNDN);
        mpfr_div(r6215805, r6215801, r6215804, MPFR_RNDN);
        mpfr_sub(r6215806, r6215803, r6215802, MPFR_RNDN);
        mpfr_div(r6215807, r6215805, r6215806, MPFR_RNDN);
        ;
        mpfr_set_si(r6215809, mpfr_cmp(r6215798, r6215808) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r6215812, r6215798, r6215811, MPFR_RNDN);
        mpfr_div(r6215813, r6215802, r6215798, MPFR_RNDN);
        mpfr_add(r6215814, r6215812, r6215813, MPFR_RNDN);
        mpfr_add(r6215815, r6215810, r6215814, MPFR_RNDN);
        mpfr_neg(r6215816, r6215798, MPFR_RNDN);
        mpfr_exp(r6215817, r6215816, MPFR_RNDN);
        mpfr_sub(r6215818, r6215802, r6215817, MPFR_RNDN);
        mpfr_div(r6215819, r6215802, r6215818, MPFR_RNDN);
        if (mpfr_get_si(r6215809, MPFR_RNDN)) { mpfr_set(r6215820, r6215815, MPFR_RNDN); } else { mpfr_set(r6215820, r6215819, MPFR_RNDN); };
        if (mpfr_get_si(r6215800, MPFR_RNDN)) { mpfr_set(r6215821, r6215807, MPFR_RNDN); } else { mpfr_set(r6215821, r6215820, MPFR_RNDN); };
        return mpfr_get_d(r6215821, MPFR_RNDN);
}

static mpfr_t r6215822, r6215823, r6215824, r6215825, r6215826, r6215827, r6215828, r6215829, r6215830, r6215831, r6215832, r6215833, r6215834, r6215835, r6215836, r6215837, r6215838, r6215839, r6215840, r6215841, r6215842, r6215843, r6215844, r6215845;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6215822);
        mpfr_init_set_str(r6215823, "-0.0020821440085700095", 10, MPFR_RNDN);
        mpfr_init(r6215824);
        mpfr_init(r6215825);
        mpfr_init_set_str(r6215826, "1", 10, MPFR_RNDN);
        mpfr_init(r6215827);
        mpfr_init(r6215828);
        mpfr_init(r6215829);
        mpfr_init(r6215830);
        mpfr_init(r6215831);
        mpfr_init_set_str(r6215832, "0.0018970338561144866", 10, MPFR_RNDN);
        mpfr_init(r6215833);
        mpfr_init_set_str(r6215834, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r6215835, "1/12", 10, MPFR_RNDN);
        mpfr_init(r6215836);
        mpfr_init(r6215837);
        mpfr_init(r6215838);
        mpfr_init(r6215839);
        mpfr_init(r6215840);
        mpfr_init(r6215841);
        mpfr_init(r6215842);
        mpfr_init(r6215843);
        mpfr_init(r6215844);
        mpfr_init(r6215845);
}

double f_dm(double x) {
        mpfr_set_d(r6215822, x, MPFR_RNDN);
        ;
        mpfr_set_si(r6215824, mpfr_cmp(r6215822, r6215823) <= 0, MPFR_RNDN);
        mpfr_exp(r6215825, r6215822, MPFR_RNDN);
        ;
        mpfr_sqrt(r6215827, r6215825, MPFR_RNDN);
        mpfr_add(r6215828, r6215826, r6215827, MPFR_RNDN);
        mpfr_div(r6215829, r6215825, r6215828, MPFR_RNDN);
        mpfr_sub(r6215830, r6215827, r6215826, MPFR_RNDN);
        mpfr_div(r6215831, r6215829, r6215830, MPFR_RNDN);
        ;
        mpfr_set_si(r6215833, mpfr_cmp(r6215822, r6215832) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r6215836, r6215822, r6215835, MPFR_RNDN);
        mpfr_div(r6215837, r6215826, r6215822, MPFR_RNDN);
        mpfr_add(r6215838, r6215836, r6215837, MPFR_RNDN);
        mpfr_add(r6215839, r6215834, r6215838, MPFR_RNDN);
        mpfr_neg(r6215840, r6215822, MPFR_RNDN);
        mpfr_exp(r6215841, r6215840, MPFR_RNDN);
        mpfr_sub(r6215842, r6215826, r6215841, MPFR_RNDN);
        mpfr_div(r6215843, r6215826, r6215842, MPFR_RNDN);
        if (mpfr_get_si(r6215833, MPFR_RNDN)) { mpfr_set(r6215844, r6215839, MPFR_RNDN); } else { mpfr_set(r6215844, r6215843, MPFR_RNDN); };
        if (mpfr_get_si(r6215824, MPFR_RNDN)) { mpfr_set(r6215845, r6215831, MPFR_RNDN); } else { mpfr_set(r6215845, r6215844, MPFR_RNDN); };
        return mpfr_get_d(r6215845, MPFR_RNDN);
}

