#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "exp2 (problem 3.3.7)";

double f_if(float x) {
        float r26928 = x;
        float r26929 = exp(r26928);
        float r26930 = 2;
        float r26931 = r26929 - r26930;
        float r26932 = -r26928;
        float r26933 = exp(r26932);
        float r26934 = r26931 + r26933;
        return r26934;
}

double f_id(double x) {
        double r26935 = x;
        double r26936 = exp(r26935);
        double r26937 = 2;
        double r26938 = r26936 - r26937;
        double r26939 = -r26935;
        double r26940 = exp(r26939);
        double r26941 = r26938 + r26940;
        return r26941;
}


double f_of(float x) {
        float r26942 = 1/12;
        float r26943 = x;
        float r26944 = 4;
        float r26945 = pow(r26943, r26944);
        float r26946 = 6;
        float r26947 = pow(r26943, r26946);
        float r26948 = 1/360;
        float r26949 = r26943 * r26943;
        float r26950 = fma(r26947, r26948, r26949);
        float r26951 = fma(r26942, r26945, r26950);
        return r26951;
}

double f_od(double x) {
        double r26952 = 1/12;
        double r26953 = x;
        double r26954 = 4;
        double r26955 = pow(r26953, r26954);
        double r26956 = 6;
        double r26957 = pow(r26953, r26956);
        double r26958 = 1/360;
        double r26959 = r26953 * r26953;
        double r26960 = fma(r26957, r26958, r26959);
        double r26961 = fma(r26952, r26955, r26960);
        return r26961;
}

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 r26962, r26963, r26964, r26965, r26966, r26967, r26968;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26962);
        mpfr_init(r26963);
        mpfr_init_set_str(r26964, "2", 10, MPFR_RNDN);
        mpfr_init(r26965);
        mpfr_init(r26966);
        mpfr_init(r26967);
        mpfr_init(r26968);
}

double f_im(double x) {
        mpfr_set_d(r26962, x, MPFR_RNDN);
        mpfr_exp(r26963, r26962, MPFR_RNDN);
        ;
        mpfr_sub(r26965, r26963, r26964, MPFR_RNDN);
        mpfr_neg(r26966, r26962, MPFR_RNDN);
        mpfr_exp(r26967, r26966, MPFR_RNDN);
        mpfr_add(r26968, r26965, r26967, MPFR_RNDN);
        return mpfr_get_d(r26968, MPFR_RNDN);
}

static mpfr_t r26969, r26970, r26971, r26972, r26973, r26974, r26975, r26976, r26977, r26978;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r26969, "1/12", 10, MPFR_RNDN);
        mpfr_init(r26970);
        mpfr_init_set_str(r26971, "4", 10, MPFR_RNDN);
        mpfr_init(r26972);
        mpfr_init_set_str(r26973, "6", 10, MPFR_RNDN);
        mpfr_init(r26974);
        mpfr_init_set_str(r26975, "1/360", 10, MPFR_RNDN);
        mpfr_init(r26976);
        mpfr_init(r26977);
        mpfr_init(r26978);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r26970, x, MPFR_RNDN);
        ;
        mpfr_pow(r26972, r26970, r26971, MPFR_RNDN);
        ;
        mpfr_pow(r26974, r26970, r26973, MPFR_RNDN);
        ;
        mpfr_mul(r26976, r26970, r26970, MPFR_RNDN);
        mpfr_fma(r26977, r26974, r26975, r26976, MPFR_RNDN);
        mpfr_fma(r26978, r26969, r26972, r26977, MPFR_RNDN);
        return mpfr_get_d(r26978, MPFR_RNDN);
}

static mpfr_t r26979, r26980, r26981, r26982, r26983, r26984, r26985, r26986, r26987, r26988;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r26979, "1/12", 10, MPFR_RNDN);
        mpfr_init(r26980);
        mpfr_init_set_str(r26981, "4", 10, MPFR_RNDN);
        mpfr_init(r26982);
        mpfr_init_set_str(r26983, "6", 10, MPFR_RNDN);
        mpfr_init(r26984);
        mpfr_init_set_str(r26985, "1/360", 10, MPFR_RNDN);
        mpfr_init(r26986);
        mpfr_init(r26987);
        mpfr_init(r26988);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r26980, x, MPFR_RNDN);
        ;
        mpfr_pow(r26982, r26980, r26981, MPFR_RNDN);
        ;
        mpfr_pow(r26984, r26980, r26983, MPFR_RNDN);
        ;
        mpfr_mul(r26986, r26980, r26980, MPFR_RNDN);
        mpfr_fma(r26987, r26984, r26985, r26986, MPFR_RNDN);
        mpfr_fma(r26988, r26979, r26982, r26987, MPFR_RNDN);
        return mpfr_get_d(r26988, MPFR_RNDN);
}

