#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 r24508 = x;
        float r24509 = exp(r24508);
        float r24510 = 2;
        float r24511 = r24509 - r24510;
        float r24512 = -r24508;
        float r24513 = exp(r24512);
        float r24514 = r24511 + r24513;
        return r24514;
}

double f_id(double x) {
        double r24515 = x;
        double r24516 = exp(r24515);
        double r24517 = 2;
        double r24518 = r24516 - r24517;
        double r24519 = -r24515;
        double r24520 = exp(r24519);
        double r24521 = r24518 + r24520;
        return r24521;
}


double f_of(float x) {
        float r24522 = x;
        float r24523 = 2;
        float r24524 = pow(r24522, r24523);
        float r24525 = 1/12;
        float r24526 = 4;
        float r24527 = pow(r24522, r24526);
        float r24528 = r24525 * r24527;
        float r24529 = 1/360;
        float r24530 = 6;
        float r24531 = pow(r24522, r24530);
        float r24532 = r24529 * r24531;
        float r24533 = r24528 + r24532;
        float r24534 = r24524 + r24533;
        return r24534;
}

double f_od(double x) {
        double r24535 = x;
        double r24536 = 2;
        double r24537 = pow(r24535, r24536);
        double r24538 = 1/12;
        double r24539 = 4;
        double r24540 = pow(r24535, r24539);
        double r24541 = r24538 * r24540;
        double r24542 = 1/360;
        double r24543 = 6;
        double r24544 = pow(r24535, r24543);
        double r24545 = r24542 * r24544;
        double r24546 = r24541 + r24545;
        double r24547 = r24537 + r24546;
        return r24547;
}

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 r24548, r24549, r24550, r24551, r24552, r24553, r24554;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r24548);
        mpfr_init(r24549);
        mpfr_init_set_str(r24550, "2", 10, MPFR_RNDN);
        mpfr_init(r24551);
        mpfr_init(r24552);
        mpfr_init(r24553);
        mpfr_init(r24554);
}

double f_im(double x) {
        mpfr_set_d(r24548, x, MPFR_RNDN);
        mpfr_exp(r24549, r24548, MPFR_RNDN);
        ;
        mpfr_sub(r24551, r24549, r24550, MPFR_RNDN);
        mpfr_neg(r24552, r24548, MPFR_RNDN);
        mpfr_exp(r24553, r24552, MPFR_RNDN);
        mpfr_add(r24554, r24551, r24553, MPFR_RNDN);
        return mpfr_get_d(r24554, MPFR_RNDN);
}

static mpfr_t r24555, r24556, r24557, r24558, r24559, r24560, r24561, r24562, r24563, r24564, r24565, r24566, r24567;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r24555);
        mpfr_init_set_str(r24556, "2", 10, MPFR_RNDN);
        mpfr_init(r24557);
        mpfr_init_set_str(r24558, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r24559, "4", 10, MPFR_RNDN);
        mpfr_init(r24560);
        mpfr_init(r24561);
        mpfr_init_set_str(r24562, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r24563, "6", 10, MPFR_RNDN);
        mpfr_init(r24564);
        mpfr_init(r24565);
        mpfr_init(r24566);
        mpfr_init(r24567);
}

double f_fm(double x) {
        mpfr_set_d(r24555, x, MPFR_RNDN);
        ;
        mpfr_pow(r24557, r24555, r24556, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r24560, r24555, r24559, MPFR_RNDN);
        mpfr_mul(r24561, r24558, r24560, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r24564, r24555, r24563, MPFR_RNDN);
        mpfr_mul(r24565, r24562, r24564, MPFR_RNDN);
        mpfr_add(r24566, r24561, r24565, MPFR_RNDN);
        mpfr_add(r24567, r24557, r24566, MPFR_RNDN);
        return mpfr_get_d(r24567, MPFR_RNDN);
}

static mpfr_t r24568, r24569, r24570, r24571, r24572, r24573, r24574, r24575, r24576, r24577, r24578, r24579, r24580;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r24568);
        mpfr_init_set_str(r24569, "2", 10, MPFR_RNDN);
        mpfr_init(r24570);
        mpfr_init_set_str(r24571, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r24572, "4", 10, MPFR_RNDN);
        mpfr_init(r24573);
        mpfr_init(r24574);
        mpfr_init_set_str(r24575, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r24576, "6", 10, MPFR_RNDN);
        mpfr_init(r24577);
        mpfr_init(r24578);
        mpfr_init(r24579);
        mpfr_init(r24580);
}

double f_dm(double x) {
        mpfr_set_d(r24568, x, MPFR_RNDN);
        ;
        mpfr_pow(r24570, r24568, r24569, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r24573, r24568, r24572, MPFR_RNDN);
        mpfr_mul(r24574, r24571, r24573, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r24577, r24568, r24576, MPFR_RNDN);
        mpfr_mul(r24578, r24575, r24577, MPFR_RNDN);
        mpfr_add(r24579, r24574, r24578, MPFR_RNDN);
        mpfr_add(r24580, r24570, r24579, MPFR_RNDN);
        return mpfr_get_d(r24580, MPFR_RNDN);
}

