#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 r26974 = x;
        float r26975 = exp(r26974);
        float r26976 = 2;
        float r26977 = r26975 - r26976;
        float r26978 = -r26974;
        float r26979 = exp(r26978);
        float r26980 = r26977 + r26979;
        return r26980;
}

double f_id(double x) {
        double r26981 = x;
        double r26982 = exp(r26981);
        double r26983 = 2;
        double r26984 = r26982 - r26983;
        double r26985 = -r26981;
        double r26986 = exp(r26985);
        double r26987 = r26984 + r26986;
        return r26987;
}


double f_of(float x) {
        float r26988 = x;
        float r26989 = 2;
        float r26990 = pow(r26988, r26989);
        float r26991 = 1/12;
        float r26992 = 4;
        float r26993 = pow(r26988, r26992);
        float r26994 = r26991 * r26993;
        float r26995 = 1/360;
        float r26996 = 6;
        float r26997 = pow(r26988, r26996);
        float r26998 = r26995 * r26997;
        float r26999 = r26994 + r26998;
        float r27000 = r26990 + r26999;
        return r27000;
}

double f_od(double x) {
        double r27001 = x;
        double r27002 = 2;
        double r27003 = pow(r27001, r27002);
        double r27004 = 1/12;
        double r27005 = 4;
        double r27006 = pow(r27001, r27005);
        double r27007 = r27004 * r27006;
        double r27008 = 1/360;
        double r27009 = 6;
        double r27010 = pow(r27001, r27009);
        double r27011 = r27008 * r27010;
        double r27012 = r27007 + r27011;
        double r27013 = r27003 + r27012;
        return r27013;
}

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 r27014, r27015, r27016, r27017, r27018, r27019, r27020;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27014);
        mpfr_init(r27015);
        mpfr_init_set_str(r27016, "2", 10, MPFR_RNDN);
        mpfr_init(r27017);
        mpfr_init(r27018);
        mpfr_init(r27019);
        mpfr_init(r27020);
}

double f_im(double x) {
        mpfr_set_d(r27014, x, MPFR_RNDN);
        mpfr_exp(r27015, r27014, MPFR_RNDN);
        ;
        mpfr_sub(r27017, r27015, r27016, MPFR_RNDN);
        mpfr_neg(r27018, r27014, MPFR_RNDN);
        mpfr_exp(r27019, r27018, MPFR_RNDN);
        mpfr_add(r27020, r27017, r27019, MPFR_RNDN);
        return mpfr_get_d(r27020, MPFR_RNDN);
}

static mpfr_t r27021, r27022, r27023, r27024, r27025, r27026, r27027, r27028, r27029, r27030, r27031, r27032, r27033;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27021);
        mpfr_init_set_str(r27022, "2", 10, MPFR_RNDN);
        mpfr_init(r27023);
        mpfr_init_set_str(r27024, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r27025, "4", 10, MPFR_RNDN);
        mpfr_init(r27026);
        mpfr_init(r27027);
        mpfr_init_set_str(r27028, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r27029, "6", 10, MPFR_RNDN);
        mpfr_init(r27030);
        mpfr_init(r27031);
        mpfr_init(r27032);
        mpfr_init(r27033);
}

double f_fm(double x) {
        mpfr_set_d(r27021, x, MPFR_RNDN);
        ;
        mpfr_pow(r27023, r27021, r27022, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27026, r27021, r27025, MPFR_RNDN);
        mpfr_mul(r27027, r27024, r27026, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27030, r27021, r27029, MPFR_RNDN);
        mpfr_mul(r27031, r27028, r27030, MPFR_RNDN);
        mpfr_add(r27032, r27027, r27031, MPFR_RNDN);
        mpfr_add(r27033, r27023, r27032, MPFR_RNDN);
        return mpfr_get_d(r27033, MPFR_RNDN);
}

static mpfr_t r27034, r27035, r27036, r27037, r27038, r27039, r27040, r27041, r27042, r27043, r27044, r27045, r27046;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27034);
        mpfr_init_set_str(r27035, "2", 10, MPFR_RNDN);
        mpfr_init(r27036);
        mpfr_init_set_str(r27037, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r27038, "4", 10, MPFR_RNDN);
        mpfr_init(r27039);
        mpfr_init(r27040);
        mpfr_init_set_str(r27041, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r27042, "6", 10, MPFR_RNDN);
        mpfr_init(r27043);
        mpfr_init(r27044);
        mpfr_init(r27045);
        mpfr_init(r27046);
}

double f_dm(double x) {
        mpfr_set_d(r27034, x, MPFR_RNDN);
        ;
        mpfr_pow(r27036, r27034, r27035, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27039, r27034, r27038, MPFR_RNDN);
        mpfr_mul(r27040, r27037, r27039, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27043, r27034, r27042, MPFR_RNDN);
        mpfr_mul(r27044, r27041, r27043, MPFR_RNDN);
        mpfr_add(r27045, r27040, r27044, MPFR_RNDN);
        mpfr_add(r27046, r27036, r27045, MPFR_RNDN);
        return mpfr_get_d(r27046, MPFR_RNDN);
}

