#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 r39268 = x;
        float r39269 = exp(r39268);
        float r39270 = 2;
        float r39271 = r39269 - r39270;
        float r39272 = -r39268;
        float r39273 = exp(r39272);
        float r39274 = r39271 + r39273;
        return r39274;
}

double f_id(double x) {
        double r39275 = x;
        double r39276 = exp(r39275);
        double r39277 = 2;
        double r39278 = r39276 - r39277;
        double r39279 = -r39275;
        double r39280 = exp(r39279);
        double r39281 = r39278 + r39280;
        return r39281;
}


double f_of(float x) {
        float r39282 = x;
        float r39283 = 2;
        float r39284 = pow(r39282, r39283);
        float r39285 = 1/12;
        float r39286 = 4;
        float r39287 = pow(r39282, r39286);
        float r39288 = r39285 * r39287;
        float r39289 = 1/360;
        float r39290 = 6;
        float r39291 = pow(r39282, r39290);
        float r39292 = r39289 * r39291;
        float r39293 = r39288 + r39292;
        float r39294 = r39284 + r39293;
        return r39294;
}

double f_od(double x) {
        double r39295 = x;
        double r39296 = 2;
        double r39297 = pow(r39295, r39296);
        double r39298 = 1/12;
        double r39299 = 4;
        double r39300 = pow(r39295, r39299);
        double r39301 = r39298 * r39300;
        double r39302 = 1/360;
        double r39303 = 6;
        double r39304 = pow(r39295, r39303);
        double r39305 = r39302 * r39304;
        double r39306 = r39301 + r39305;
        double r39307 = r39297 + r39306;
        return r39307;
}

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 r39308, r39309, r39310, r39311, r39312, r39313, r39314;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39308);
        mpfr_init(r39309);
        mpfr_init_set_str(r39310, "2", 10, MPFR_RNDN);
        mpfr_init(r39311);
        mpfr_init(r39312);
        mpfr_init(r39313);
        mpfr_init(r39314);
}

double f_im(double x) {
        mpfr_set_d(r39308, x, MPFR_RNDN);
        mpfr_exp(r39309, r39308, MPFR_RNDN);
        ;
        mpfr_sub(r39311, r39309, r39310, MPFR_RNDN);
        mpfr_neg(r39312, r39308, MPFR_RNDN);
        mpfr_exp(r39313, r39312, MPFR_RNDN);
        mpfr_add(r39314, r39311, r39313, MPFR_RNDN);
        return mpfr_get_d(r39314, MPFR_RNDN);
}

static mpfr_t r39315, r39316, r39317, r39318, r39319, r39320, r39321, r39322, r39323, r39324, r39325, r39326, r39327;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39315);
        mpfr_init_set_str(r39316, "2", 10, MPFR_RNDN);
        mpfr_init(r39317);
        mpfr_init_set_str(r39318, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r39319, "4", 10, MPFR_RNDN);
        mpfr_init(r39320);
        mpfr_init(r39321);
        mpfr_init_set_str(r39322, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r39323, "6", 10, MPFR_RNDN);
        mpfr_init(r39324);
        mpfr_init(r39325);
        mpfr_init(r39326);
        mpfr_init(r39327);
}

double f_fm(double x) {
        mpfr_set_d(r39315, x, MPFR_RNDN);
        ;
        mpfr_pow(r39317, r39315, r39316, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39320, r39315, r39319, MPFR_RNDN);
        mpfr_mul(r39321, r39318, r39320, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39324, r39315, r39323, MPFR_RNDN);
        mpfr_mul(r39325, r39322, r39324, MPFR_RNDN);
        mpfr_add(r39326, r39321, r39325, MPFR_RNDN);
        mpfr_add(r39327, r39317, r39326, MPFR_RNDN);
        return mpfr_get_d(r39327, MPFR_RNDN);
}

static mpfr_t r39328, r39329, r39330, r39331, r39332, r39333, r39334, r39335, r39336, r39337, r39338, r39339, r39340;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r39328);
        mpfr_init_set_str(r39329, "2", 10, MPFR_RNDN);
        mpfr_init(r39330);
        mpfr_init_set_str(r39331, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r39332, "4", 10, MPFR_RNDN);
        mpfr_init(r39333);
        mpfr_init(r39334);
        mpfr_init_set_str(r39335, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r39336, "6", 10, MPFR_RNDN);
        mpfr_init(r39337);
        mpfr_init(r39338);
        mpfr_init(r39339);
        mpfr_init(r39340);
}

double f_dm(double x) {
        mpfr_set_d(r39328, x, MPFR_RNDN);
        ;
        mpfr_pow(r39330, r39328, r39329, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39333, r39328, r39332, MPFR_RNDN);
        mpfr_mul(r39334, r39331, r39333, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39337, r39328, r39336, MPFR_RNDN);
        mpfr_mul(r39338, r39335, r39337, MPFR_RNDN);
        mpfr_add(r39339, r39334, r39338, MPFR_RNDN);
        mpfr_add(r39340, r39330, r39339, MPFR_RNDN);
        return mpfr_get_d(r39340, MPFR_RNDN);
}

