#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 r4875889 = x;
        float r4875890 = exp(r4875889);
        float r4875891 = 1.0f;
        float r4875892 = r4875890 - r4875891;
        float r4875893 = r4875890 / r4875892;
        return r4875893;
}

double f_id(double x) {
        double r4875894 = x;
        double r4875895 = exp(r4875894);
        double r4875896 = 1.0;
        double r4875897 = r4875895 - r4875896;
        double r4875898 = r4875895 / r4875897;
        return r4875898;
}


double f_of(float x) {
        float r4875899 = x;
        float r4875900 = -3.859884253300168e-07f;
        bool r4875901 = r4875899 <= r4875900;
        float r4875902 = exp(r4875899);
        float r4875903 = r4875899 + r4875899;
        float r4875904 = exp(r4875903);
        float r4875905 = 1.0f;
        float r4875906 = r4875904 - r4875905;
        float r4875907 = r4875902 + r4875905;
        float r4875908 = r4875906 / r4875907;
        float r4875909 = r4875902 / r4875908;
        float r4875910 = 0.5f;
        float r4875911 = r4875905 / r4875899;
        float r4875912 = 0.08333333333333333f;
        float r4875913 = r4875912 * r4875899;
        float r4875914 = r4875911 + r4875913;
        float r4875915 = r4875910 + r4875914;
        float r4875916 = r4875901 ? r4875909 : r4875915;
        return r4875916;
}

double f_od(double x) {
        double r4875917 = x;
        double r4875918 = -3.859884253300168e-07;
        bool r4875919 = r4875917 <= r4875918;
        double r4875920 = exp(r4875917);
        double r4875921 = r4875917 + r4875917;
        double r4875922 = exp(r4875921);
        double r4875923 = 1.0;
        double r4875924 = r4875922 - r4875923;
        double r4875925 = r4875920 + r4875923;
        double r4875926 = r4875924 / r4875925;
        double r4875927 = r4875920 / r4875926;
        double r4875928 = 0.5;
        double r4875929 = r4875923 / r4875917;
        double r4875930 = 0.08333333333333333;
        double r4875931 = r4875930 * r4875917;
        double r4875932 = r4875929 + r4875931;
        double r4875933 = r4875928 + r4875932;
        double r4875934 = r4875919 ? r4875927 : r4875933;
        return r4875934;
}

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 r4875935, r4875936, r4875937, r4875938, r4875939;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4875935);
        mpfr_init(r4875936);
        mpfr_init_set_str(r4875937, "1", 10, MPFR_RNDN);
        mpfr_init(r4875938);
        mpfr_init(r4875939);
}

double f_im(double x) {
        mpfr_set_d(r4875935, x, MPFR_RNDN);
        mpfr_exp(r4875936, r4875935, MPFR_RNDN);
        ;
        mpfr_sub(r4875938, r4875936, r4875937, MPFR_RNDN);
        mpfr_div(r4875939, r4875936, r4875938, MPFR_RNDN);
        return mpfr_get_d(r4875939, MPFR_RNDN);
}

static mpfr_t r4875940, r4875941, r4875942, r4875943, r4875944, r4875945, r4875946, r4875947, r4875948, r4875949, r4875950, r4875951, r4875952, r4875953, r4875954, r4875955, r4875956, r4875957;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4875940);
        mpfr_init_set_str(r4875941, "-3.859884253300168e-07", 10, MPFR_RNDN);
        mpfr_init(r4875942);
        mpfr_init(r4875943);
        mpfr_init(r4875944);
        mpfr_init(r4875945);
        mpfr_init_set_str(r4875946, "1", 10, MPFR_RNDN);
        mpfr_init(r4875947);
        mpfr_init(r4875948);
        mpfr_init(r4875949);
        mpfr_init(r4875950);
        mpfr_init_set_str(r4875951, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4875952);
        mpfr_init_set_str(r4875953, "1/12", 10, MPFR_RNDN);
        mpfr_init(r4875954);
        mpfr_init(r4875955);
        mpfr_init(r4875956);
        mpfr_init(r4875957);
}

double f_fm(double x) {
        mpfr_set_d(r4875940, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4875942, mpfr_cmp(r4875940, r4875941) <= 0, MPFR_RNDN);
        mpfr_exp(r4875943, r4875940, MPFR_RNDN);
        mpfr_add(r4875944, r4875940, r4875940, MPFR_RNDN);
        mpfr_exp(r4875945, r4875944, MPFR_RNDN);
        ;
        mpfr_sub(r4875947, r4875945, r4875946, MPFR_RNDN);
        mpfr_add(r4875948, r4875943, r4875946, MPFR_RNDN);
        mpfr_div(r4875949, r4875947, r4875948, MPFR_RNDN);
        mpfr_div(r4875950, r4875943, r4875949, MPFR_RNDN);
        ;
        mpfr_div(r4875952, r4875946, r4875940, MPFR_RNDN);
        ;
        mpfr_mul(r4875954, r4875953, r4875940, MPFR_RNDN);
        mpfr_add(r4875955, r4875952, r4875954, MPFR_RNDN);
        mpfr_add(r4875956, r4875951, r4875955, MPFR_RNDN);
        if (mpfr_get_si(r4875942, MPFR_RNDN)) { mpfr_set(r4875957, r4875950, MPFR_RNDN); } else { mpfr_set(r4875957, r4875956, MPFR_RNDN); };
        return mpfr_get_d(r4875957, MPFR_RNDN);
}

static mpfr_t r4875958, r4875959, r4875960, r4875961, r4875962, r4875963, r4875964, r4875965, r4875966, r4875967, r4875968, r4875969, r4875970, r4875971, r4875972, r4875973, r4875974, r4875975;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4875958);
        mpfr_init_set_str(r4875959, "-3.859884253300168e-07", 10, MPFR_RNDN);
        mpfr_init(r4875960);
        mpfr_init(r4875961);
        mpfr_init(r4875962);
        mpfr_init(r4875963);
        mpfr_init_set_str(r4875964, "1", 10, MPFR_RNDN);
        mpfr_init(r4875965);
        mpfr_init(r4875966);
        mpfr_init(r4875967);
        mpfr_init(r4875968);
        mpfr_init_set_str(r4875969, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4875970);
        mpfr_init_set_str(r4875971, "1/12", 10, MPFR_RNDN);
        mpfr_init(r4875972);
        mpfr_init(r4875973);
        mpfr_init(r4875974);
        mpfr_init(r4875975);
}

double f_dm(double x) {
        mpfr_set_d(r4875958, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4875960, mpfr_cmp(r4875958, r4875959) <= 0, MPFR_RNDN);
        mpfr_exp(r4875961, r4875958, MPFR_RNDN);
        mpfr_add(r4875962, r4875958, r4875958, MPFR_RNDN);
        mpfr_exp(r4875963, r4875962, MPFR_RNDN);
        ;
        mpfr_sub(r4875965, r4875963, r4875964, MPFR_RNDN);
        mpfr_add(r4875966, r4875961, r4875964, MPFR_RNDN);
        mpfr_div(r4875967, r4875965, r4875966, MPFR_RNDN);
        mpfr_div(r4875968, r4875961, r4875967, MPFR_RNDN);
        ;
        mpfr_div(r4875970, r4875964, r4875958, MPFR_RNDN);
        ;
        mpfr_mul(r4875972, r4875971, r4875958, MPFR_RNDN);
        mpfr_add(r4875973, r4875970, r4875972, MPFR_RNDN);
        mpfr_add(r4875974, r4875969, r4875973, MPFR_RNDN);
        if (mpfr_get_si(r4875960, MPFR_RNDN)) { mpfr_set(r4875975, r4875968, MPFR_RNDN); } else { mpfr_set(r4875975, r4875974, MPFR_RNDN); };
        return mpfr_get_d(r4875975, MPFR_RNDN);
}

