#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 r39324 = x;
        float r39325 = exp(r39324);
        float r39326 = 2;
        float r39327 = r39325 - r39326;
        float r39328 = -r39324;
        float r39329 = exp(r39328);
        float r39330 = r39327 + r39329;
        return r39330;
}

double f_id(double x) {
        double r39331 = x;
        double r39332 = exp(r39331);
        double r39333 = 2;
        double r39334 = r39332 - r39333;
        double r39335 = -r39331;
        double r39336 = exp(r39335);
        double r39337 = r39334 + r39336;
        return r39337;
}


double f_of(float x) {
        float r39338 = x;
        float r39339 = 2;
        float r39340 = pow(r39338, r39339);
        float r39341 = 1/12;
        float r39342 = 4;
        float r39343 = pow(r39338, r39342);
        float r39344 = r39341 * r39343;
        float r39345 = 1/360;
        float r39346 = 6;
        float r39347 = pow(r39338, r39346);
        float r39348 = r39345 * r39347;
        float r39349 = r39344 + r39348;
        float r39350 = r39340 + r39349;
        return r39350;
}

double f_od(double x) {
        double r39351 = x;
        double r39352 = 2;
        double r39353 = pow(r39351, r39352);
        double r39354 = 1/12;
        double r39355 = 4;
        double r39356 = pow(r39351, r39355);
        double r39357 = r39354 * r39356;
        double r39358 = 1/360;
        double r39359 = 6;
        double r39360 = pow(r39351, r39359);
        double r39361 = r39358 * r39360;
        double r39362 = r39357 + r39361;
        double r39363 = r39353 + r39362;
        return r39363;
}

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 r39364, r39365, r39366, r39367, r39368, r39369, r39370;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39364);
        mpfr_init(r39365);
        mpfr_init_set_str(r39366, "2", 10, MPFR_RNDN);
        mpfr_init(r39367);
        mpfr_init(r39368);
        mpfr_init(r39369);
        mpfr_init(r39370);
}

double f_im(double x) {
        mpfr_set_d(r39364, x, MPFR_RNDN);
        mpfr_exp(r39365, r39364, MPFR_RNDN);
        ;
        mpfr_sub(r39367, r39365, r39366, MPFR_RNDN);
        mpfr_neg(r39368, r39364, MPFR_RNDN);
        mpfr_exp(r39369, r39368, MPFR_RNDN);
        mpfr_add(r39370, r39367, r39369, MPFR_RNDN);
        return mpfr_get_d(r39370, MPFR_RNDN);
}

static mpfr_t r39371, r39372, r39373, r39374, r39375, r39376, r39377, r39378, r39379, r39380, r39381, r39382, r39383;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39371);
        mpfr_init_set_str(r39372, "2", 10, MPFR_RNDN);
        mpfr_init(r39373);
        mpfr_init_set_str(r39374, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r39375, "4", 10, MPFR_RNDN);
        mpfr_init(r39376);
        mpfr_init(r39377);
        mpfr_init_set_str(r39378, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r39379, "6", 10, MPFR_RNDN);
        mpfr_init(r39380);
        mpfr_init(r39381);
        mpfr_init(r39382);
        mpfr_init(r39383);
}

double f_fm(double x) {
        mpfr_set_d(r39371, x, MPFR_RNDN);
        ;
        mpfr_pow(r39373, r39371, r39372, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39376, r39371, r39375, MPFR_RNDN);
        mpfr_mul(r39377, r39374, r39376, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39380, r39371, r39379, MPFR_RNDN);
        mpfr_mul(r39381, r39378, r39380, MPFR_RNDN);
        mpfr_add(r39382, r39377, r39381, MPFR_RNDN);
        mpfr_add(r39383, r39373, r39382, MPFR_RNDN);
        return mpfr_get_d(r39383, MPFR_RNDN);
}

static mpfr_t r39384, r39385, r39386, r39387, r39388, r39389, r39390, r39391, r39392, r39393, r39394, r39395, r39396;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39384);
        mpfr_init_set_str(r39385, "2", 10, MPFR_RNDN);
        mpfr_init(r39386);
        mpfr_init_set_str(r39387, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r39388, "4", 10, MPFR_RNDN);
        mpfr_init(r39389);
        mpfr_init(r39390);
        mpfr_init_set_str(r39391, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r39392, "6", 10, MPFR_RNDN);
        mpfr_init(r39393);
        mpfr_init(r39394);
        mpfr_init(r39395);
        mpfr_init(r39396);
}

double f_dm(double x) {
        mpfr_set_d(r39384, x, MPFR_RNDN);
        ;
        mpfr_pow(r39386, r39384, r39385, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39389, r39384, r39388, MPFR_RNDN);
        mpfr_mul(r39390, r39387, r39389, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39393, r39384, r39392, MPFR_RNDN);
        mpfr_mul(r39394, r39391, r39393, MPFR_RNDN);
        mpfr_add(r39395, r39390, r39394, MPFR_RNDN);
        mpfr_add(r39396, r39386, r39395, MPFR_RNDN);
        return mpfr_get_d(r39396, MPFR_RNDN);
}

