#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 r11871884 = x;
        float r11871885 = exp(r11871884);
        float r11871886 = 1;
        float r11871887 = r11871885 - r11871886;
        float r11871888 = r11871885 / r11871887;
        return r11871888;
}

double f_id(double x) {
        double r11871889 = x;
        double r11871890 = exp(r11871889);
        double r11871891 = 1;
        double r11871892 = r11871890 - r11871891;
        double r11871893 = r11871890 / r11871892;
        return r11871893;
}


double f_of(float x) {
        float r11871894 = 1;
        float r11871895 = x;
        float r11871896 = -r11871895;
        float r11871897 = exp(r11871896);
        float r11871898 = r11871894 - r11871897;
        float r11871899 = r11871894 / r11871898;
        float r11871900 = 3.2151599691497488;
        bool r11871901 = r11871899 <= r11871900;
        float r11871902 = 1/2;
        float r11871903 = r11871894 / r11871895;
        float r11871904 = 1/12;
        float r11871905 = r11871904 * r11871895;
        float r11871906 = r11871903 + r11871905;
        float r11871907 = r11871902 + r11871906;
        float r11871908 = r11871901 ? r11871899 : r11871907;
        return r11871908;
}

double f_od(double x) {
        double r11871909 = 1;
        double r11871910 = x;
        double r11871911 = -r11871910;
        double r11871912 = exp(r11871911);
        double r11871913 = r11871909 - r11871912;
        double r11871914 = r11871909 / r11871913;
        double r11871915 = 3.2151599691497488;
        bool r11871916 = r11871914 <= r11871915;
        double r11871917 = 1/2;
        double r11871918 = r11871909 / r11871910;
        double r11871919 = 1/12;
        double r11871920 = r11871919 * r11871910;
        double r11871921 = r11871918 + r11871920;
        double r11871922 = r11871917 + r11871921;
        double r11871923 = r11871916 ? r11871914 : r11871922;
        return r11871923;
}

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 r11871924, r11871925, r11871926, r11871927, r11871928;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r11871924);
        mpfr_init(r11871925);
        mpfr_init_set_str(r11871926, "1", 10, MPFR_RNDN);
        mpfr_init(r11871927);
        mpfr_init(r11871928);
}

double f_im(double x) {
        mpfr_set_d(r11871924, x, MPFR_RNDN);
        mpfr_exp(r11871925, r11871924, MPFR_RNDN);
        ;
        mpfr_sub(r11871927, r11871925, r11871926, MPFR_RNDN);
        mpfr_div(r11871928, r11871925, r11871927, MPFR_RNDN);
        return mpfr_get_d(r11871928, MPFR_RNDN);
}

static mpfr_t r11871929, r11871930, r11871931, r11871932, r11871933, r11871934, r11871935, r11871936, r11871937, r11871938, r11871939, r11871940, r11871941, r11871942, r11871943;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r11871929, "1", 10, MPFR_RNDN);
        mpfr_init(r11871930);
        mpfr_init(r11871931);
        mpfr_init(r11871932);
        mpfr_init(r11871933);
        mpfr_init(r11871934);
        mpfr_init_set_str(r11871935, "3.2151599691497488", 10, MPFR_RNDN);
        mpfr_init(r11871936);
        mpfr_init_set_str(r11871937, "1/2", 10, MPFR_RNDN);
        mpfr_init(r11871938);
        mpfr_init_set_str(r11871939, "1/12", 10, MPFR_RNDN);
        mpfr_init(r11871940);
        mpfr_init(r11871941);
        mpfr_init(r11871942);
        mpfr_init(r11871943);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r11871930, x, MPFR_RNDN);
        mpfr_neg(r11871931, r11871930, MPFR_RNDN);
        mpfr_exp(r11871932, r11871931, MPFR_RNDN);
        mpfr_sub(r11871933, r11871929, r11871932, MPFR_RNDN);
        mpfr_div(r11871934, r11871929, r11871933, MPFR_RNDN);
        ;
        mpfr_set_si(r11871936, mpfr_cmp(r11871934, r11871935) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r11871938, r11871929, r11871930, MPFR_RNDN);
        ;
        mpfr_mul(r11871940, r11871939, r11871930, MPFR_RNDN);
        mpfr_add(r11871941, r11871938, r11871940, MPFR_RNDN);
        mpfr_add(r11871942, r11871937, r11871941, MPFR_RNDN);
        if (mpfr_get_si(r11871936, MPFR_RNDN)) { mpfr_set(r11871943, r11871934, MPFR_RNDN); } else { mpfr_set(r11871943, r11871942, MPFR_RNDN); };
        return mpfr_get_d(r11871943, MPFR_RNDN);
}

static mpfr_t r11871944, r11871945, r11871946, r11871947, r11871948, r11871949, r11871950, r11871951, r11871952, r11871953, r11871954, r11871955, r11871956, r11871957, r11871958;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r11871944, "1", 10, MPFR_RNDN);
        mpfr_init(r11871945);
        mpfr_init(r11871946);
        mpfr_init(r11871947);
        mpfr_init(r11871948);
        mpfr_init(r11871949);
        mpfr_init_set_str(r11871950, "3.2151599691497488", 10, MPFR_RNDN);
        mpfr_init(r11871951);
        mpfr_init_set_str(r11871952, "1/2", 10, MPFR_RNDN);
        mpfr_init(r11871953);
        mpfr_init_set_str(r11871954, "1/12", 10, MPFR_RNDN);
        mpfr_init(r11871955);
        mpfr_init(r11871956);
        mpfr_init(r11871957);
        mpfr_init(r11871958);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r11871945, x, MPFR_RNDN);
        mpfr_neg(r11871946, r11871945, MPFR_RNDN);
        mpfr_exp(r11871947, r11871946, MPFR_RNDN);
        mpfr_sub(r11871948, r11871944, r11871947, MPFR_RNDN);
        mpfr_div(r11871949, r11871944, r11871948, MPFR_RNDN);
        ;
        mpfr_set_si(r11871951, mpfr_cmp(r11871949, r11871950) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r11871953, r11871944, r11871945, MPFR_RNDN);
        ;
        mpfr_mul(r11871955, r11871954, r11871945, MPFR_RNDN);
        mpfr_add(r11871956, r11871953, r11871955, MPFR_RNDN);
        mpfr_add(r11871957, r11871952, r11871956, MPFR_RNDN);
        if (mpfr_get_si(r11871951, MPFR_RNDN)) { mpfr_set(r11871958, r11871949, MPFR_RNDN); } else { mpfr_set(r11871958, r11871957, MPFR_RNDN); };
        return mpfr_get_d(r11871958, MPFR_RNDN);
}

