#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 r26801 = x;
        float r26802 = exp(r26801);
        float r26803 = 1;
        float r26804 = r26802 - r26803;
        float r26805 = r26802 / r26804;
        return r26805;
}

double f_id(double x) {
        double r26806 = x;
        double r26807 = exp(r26806);
        double r26808 = 1;
        double r26809 = r26807 - r26808;
        double r26810 = r26807 / r26809;
        return r26810;
}


double f_of(float x) {
        float r26811 = 1;
        float r26812 = x;
        float r26813 = r26812 + r26812;
        float r26814 = -r26813;
        float r26815 = exp(r26814);
        float r26816 = r26811 - r26815;
        float r26817 = -r26812;
        float r26818 = exp(r26817);
        float r26819 = r26811 + r26818;
        float r26820 = r26816 / r26819;
        float r26821 = 0.03949804068118535;
        bool r26822 = r26820 <= r26821;
        float r26823 = 1/2;
        float r26824 = r26811 / r26812;
        float r26825 = 1/12;
        float r26826 = r26825 * r26812;
        float r26827 = r26824 + r26826;
        float r26828 = r26823 + r26827;
        float r26829 = exp(r26812);
        float r26830 = sqrt(r26829);
        float r26831 = r26830 + r26811;
        float r26832 = r26830 - r26811;
        float r26833 = r26831 * r26832;
        float r26834 = r26829 / r26833;
        float r26835 = r26822 ? r26828 : r26834;
        return r26835;
}

double f_od(double x) {
        double r26836 = 1;
        double r26837 = x;
        double r26838 = r26837 + r26837;
        double r26839 = -r26838;
        double r26840 = exp(r26839);
        double r26841 = r26836 - r26840;
        double r26842 = -r26837;
        double r26843 = exp(r26842);
        double r26844 = r26836 + r26843;
        double r26845 = r26841 / r26844;
        double r26846 = 0.03949804068118535;
        bool r26847 = r26845 <= r26846;
        double r26848 = 1/2;
        double r26849 = r26836 / r26837;
        double r26850 = 1/12;
        double r26851 = r26850 * r26837;
        double r26852 = r26849 + r26851;
        double r26853 = r26848 + r26852;
        double r26854 = exp(r26837);
        double r26855 = sqrt(r26854);
        double r26856 = r26855 + r26836;
        double r26857 = r26855 - r26836;
        double r26858 = r26856 * r26857;
        double r26859 = r26854 / r26858;
        double r26860 = r26847 ? r26853 : r26859;
        return r26860;
}

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 r26861, r26862, r26863, r26864, r26865;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26861);
        mpfr_init(r26862);
        mpfr_init_set_str(r26863, "1", 10, MPFR_RNDN);
        mpfr_init(r26864);
        mpfr_init(r26865);
}

double f_im(double x) {
        mpfr_set_d(r26861, x, MPFR_RNDN);
        mpfr_exp(r26862, r26861, MPFR_RNDN);
        ;
        mpfr_sub(r26864, r26862, r26863, MPFR_RNDN);
        mpfr_div(r26865, r26862, r26864, MPFR_RNDN);
        return mpfr_get_d(r26865, MPFR_RNDN);
}

static mpfr_t r26866, r26867, r26868, r26869, r26870, r26871, r26872, r26873, r26874, r26875, r26876, r26877, r26878, r26879, r26880, r26881, r26882, r26883, r26884, r26885, r26886, r26887, r26888, r26889, r26890;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r26866, "1", 10, MPFR_RNDN);
        mpfr_init(r26867);
        mpfr_init(r26868);
        mpfr_init(r26869);
        mpfr_init(r26870);
        mpfr_init(r26871);
        mpfr_init(r26872);
        mpfr_init(r26873);
        mpfr_init(r26874);
        mpfr_init(r26875);
        mpfr_init_set_str(r26876, "0.03949804068118535", 10, MPFR_RNDN);
        mpfr_init(r26877);
        mpfr_init_set_str(r26878, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26879);
        mpfr_init_set_str(r26880, "1/12", 10, MPFR_RNDN);
        mpfr_init(r26881);
        mpfr_init(r26882);
        mpfr_init(r26883);
        mpfr_init(r26884);
        mpfr_init(r26885);
        mpfr_init(r26886);
        mpfr_init(r26887);
        mpfr_init(r26888);
        mpfr_init(r26889);
        mpfr_init(r26890);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r26867, x, MPFR_RNDN);
        mpfr_add(r26868, r26867, r26867, MPFR_RNDN);
        mpfr_neg(r26869, r26868, MPFR_RNDN);
        mpfr_exp(r26870, r26869, MPFR_RNDN);
        mpfr_sub(r26871, r26866, r26870, MPFR_RNDN);
        mpfr_neg(r26872, r26867, MPFR_RNDN);
        mpfr_exp(r26873, r26872, MPFR_RNDN);
        mpfr_add(r26874, r26866, r26873, MPFR_RNDN);
        mpfr_div(r26875, r26871, r26874, MPFR_RNDN);
        ;
        mpfr_set_si(r26877, mpfr_cmp(r26875, r26876) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r26879, r26866, r26867, MPFR_RNDN);
        ;
        mpfr_mul(r26881, r26880, r26867, MPFR_RNDN);
        mpfr_add(r26882, r26879, r26881, MPFR_RNDN);
        mpfr_add(r26883, r26878, r26882, MPFR_RNDN);
        mpfr_exp(r26884, r26867, MPFR_RNDN);
        mpfr_sqrt(r26885, r26884, MPFR_RNDN);
        mpfr_add(r26886, r26885, r26866, MPFR_RNDN);
        mpfr_sub(r26887, r26885, r26866, MPFR_RNDN);
        mpfr_mul(r26888, r26886, r26887, MPFR_RNDN);
        mpfr_div(r26889, r26884, r26888, MPFR_RNDN);
        if (mpfr_get_si(r26877, MPFR_RNDN)) { mpfr_set(r26890, r26883, MPFR_RNDN); } else { mpfr_set(r26890, r26889, MPFR_RNDN); };
        return mpfr_get_d(r26890, MPFR_RNDN);
}

static mpfr_t r26891, r26892, r26893, r26894, r26895, r26896, r26897, r26898, r26899, r26900, r26901, r26902, r26903, r26904, r26905, r26906, r26907, r26908, r26909, r26910, r26911, r26912, r26913, r26914, r26915;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r26891, "1", 10, MPFR_RNDN);
        mpfr_init(r26892);
        mpfr_init(r26893);
        mpfr_init(r26894);
        mpfr_init(r26895);
        mpfr_init(r26896);
        mpfr_init(r26897);
        mpfr_init(r26898);
        mpfr_init(r26899);
        mpfr_init(r26900);
        mpfr_init_set_str(r26901, "0.03949804068118535", 10, MPFR_RNDN);
        mpfr_init(r26902);
        mpfr_init_set_str(r26903, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26904);
        mpfr_init_set_str(r26905, "1/12", 10, MPFR_RNDN);
        mpfr_init(r26906);
        mpfr_init(r26907);
        mpfr_init(r26908);
        mpfr_init(r26909);
        mpfr_init(r26910);
        mpfr_init(r26911);
        mpfr_init(r26912);
        mpfr_init(r26913);
        mpfr_init(r26914);
        mpfr_init(r26915);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r26892, x, MPFR_RNDN);
        mpfr_add(r26893, r26892, r26892, MPFR_RNDN);
        mpfr_neg(r26894, r26893, MPFR_RNDN);
        mpfr_exp(r26895, r26894, MPFR_RNDN);
        mpfr_sub(r26896, r26891, r26895, MPFR_RNDN);
        mpfr_neg(r26897, r26892, MPFR_RNDN);
        mpfr_exp(r26898, r26897, MPFR_RNDN);
        mpfr_add(r26899, r26891, r26898, MPFR_RNDN);
        mpfr_div(r26900, r26896, r26899, MPFR_RNDN);
        ;
        mpfr_set_si(r26902, mpfr_cmp(r26900, r26901) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r26904, r26891, r26892, MPFR_RNDN);
        ;
        mpfr_mul(r26906, r26905, r26892, MPFR_RNDN);
        mpfr_add(r26907, r26904, r26906, MPFR_RNDN);
        mpfr_add(r26908, r26903, r26907, MPFR_RNDN);
        mpfr_exp(r26909, r26892, MPFR_RNDN);
        mpfr_sqrt(r26910, r26909, MPFR_RNDN);
        mpfr_add(r26911, r26910, r26891, MPFR_RNDN);
        mpfr_sub(r26912, r26910, r26891, MPFR_RNDN);
        mpfr_mul(r26913, r26911, r26912, MPFR_RNDN);
        mpfr_div(r26914, r26909, r26913, MPFR_RNDN);
        if (mpfr_get_si(r26902, MPFR_RNDN)) { mpfr_set(r26915, r26908, MPFR_RNDN); } else { mpfr_set(r26915, r26914, MPFR_RNDN); };
        return mpfr_get_d(r26915, MPFR_RNDN);
}

