#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 r39431 = x;
        float r39432 = exp(r39431);
        float r39433 = 2;
        float r39434 = r39432 - r39433;
        float r39435 = -r39431;
        float r39436 = exp(r39435);
        float r39437 = r39434 + r39436;
        return r39437;
}

double f_id(double x) {
        double r39438 = x;
        double r39439 = exp(r39438);
        double r39440 = 2;
        double r39441 = r39439 - r39440;
        double r39442 = -r39438;
        double r39443 = exp(r39442);
        double r39444 = r39441 + r39443;
        return r39444;
}


double f_of(float x) {
        float r39445 = x;
        float r39446 = 2;
        float r39447 = pow(r39445, r39446);
        float r39448 = 1/12;
        float r39449 = 4;
        float r39450 = pow(r39445, r39449);
        float r39451 = r39448 * r39450;
        float r39452 = 1/360;
        float r39453 = 6;
        float r39454 = pow(r39445, r39453);
        float r39455 = r39452 * r39454;
        float r39456 = r39451 + r39455;
        float r39457 = r39447 + r39456;
        return r39457;
}

double f_od(double x) {
        double r39458 = x;
        double r39459 = 2;
        double r39460 = pow(r39458, r39459);
        double r39461 = 1/12;
        double r39462 = 4;
        double r39463 = pow(r39458, r39462);
        double r39464 = r39461 * r39463;
        double r39465 = 1/360;
        double r39466 = 6;
        double r39467 = pow(r39458, r39466);
        double r39468 = r39465 * r39467;
        double r39469 = r39464 + r39468;
        double r39470 = r39460 + r39469;
        return r39470;
}

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 r39471, r39472, r39473, r39474, r39475, r39476, r39477;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39471);
        mpfr_init(r39472);
        mpfr_init_set_str(r39473, "2", 10, MPFR_RNDN);
        mpfr_init(r39474);
        mpfr_init(r39475);
        mpfr_init(r39476);
        mpfr_init(r39477);
}

double f_im(double x) {
        mpfr_set_d(r39471, x, MPFR_RNDN);
        mpfr_exp(r39472, r39471, MPFR_RNDN);
        ;
        mpfr_sub(r39474, r39472, r39473, MPFR_RNDN);
        mpfr_neg(r39475, r39471, MPFR_RNDN);
        mpfr_exp(r39476, r39475, MPFR_RNDN);
        mpfr_add(r39477, r39474, r39476, MPFR_RNDN);
        return mpfr_get_d(r39477, MPFR_RNDN);
}

static mpfr_t r39478, r39479, r39480, r39481, r39482, r39483, r39484, r39485, r39486, r39487, r39488, r39489, r39490;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39478);
        mpfr_init_set_str(r39479, "2", 10, MPFR_RNDN);
        mpfr_init(r39480);
        mpfr_init_set_str(r39481, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r39482, "4", 10, MPFR_RNDN);
        mpfr_init(r39483);
        mpfr_init(r39484);
        mpfr_init_set_str(r39485, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r39486, "6", 10, MPFR_RNDN);
        mpfr_init(r39487);
        mpfr_init(r39488);
        mpfr_init(r39489);
        mpfr_init(r39490);
}

double f_fm(double x) {
        mpfr_set_d(r39478, x, MPFR_RNDN);
        ;
        mpfr_pow(r39480, r39478, r39479, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39483, r39478, r39482, MPFR_RNDN);
        mpfr_mul(r39484, r39481, r39483, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39487, r39478, r39486, MPFR_RNDN);
        mpfr_mul(r39488, r39485, r39487, MPFR_RNDN);
        mpfr_add(r39489, r39484, r39488, MPFR_RNDN);
        mpfr_add(r39490, r39480, r39489, MPFR_RNDN);
        return mpfr_get_d(r39490, MPFR_RNDN);
}

static mpfr_t r39491, r39492, r39493, r39494, r39495, r39496, r39497, r39498, r39499, r39500, r39501, r39502, r39503;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39491);
        mpfr_init_set_str(r39492, "2", 10, MPFR_RNDN);
        mpfr_init(r39493);
        mpfr_init_set_str(r39494, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r39495, "4", 10, MPFR_RNDN);
        mpfr_init(r39496);
        mpfr_init(r39497);
        mpfr_init_set_str(r39498, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r39499, "6", 10, MPFR_RNDN);
        mpfr_init(r39500);
        mpfr_init(r39501);
        mpfr_init(r39502);
        mpfr_init(r39503);
}

double f_dm(double x) {
        mpfr_set_d(r39491, x, MPFR_RNDN);
        ;
        mpfr_pow(r39493, r39491, r39492, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39496, r39491, r39495, MPFR_RNDN);
        mpfr_mul(r39497, r39494, r39496, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39500, r39491, r39499, MPFR_RNDN);
        mpfr_mul(r39501, r39498, r39500, MPFR_RNDN);
        mpfr_add(r39502, r39497, r39501, MPFR_RNDN);
        mpfr_add(r39503, r39493, r39502, MPFR_RNDN);
        return mpfr_get_d(r39503, MPFR_RNDN);
}

