#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "expq3 (problem 3.4.2)";

double f_if(float a, float b, float eps) {
        float r19412 = eps;
        float r19413 = a;
        float r19414 = b;
        float r19415 = r19413 + r19414;
        float r19416 = r19415 * r19412;
        float r19417 = exp(r19416);
        float r19418 = 1.0f;
        float r19419 = r19417 - r19418;
        float r19420 = r19412 * r19419;
        float r19421 = r19413 * r19412;
        float r19422 = exp(r19421);
        float r19423 = r19422 - r19418;
        float r19424 = r19414 * r19412;
        float r19425 = exp(r19424);
        float r19426 = r19425 - r19418;
        float r19427 = r19423 * r19426;
        float r19428 = r19420 / r19427;
        return r19428;
}

double f_id(double a, double b, double eps) {
        double r19429 = eps;
        double r19430 = a;
        double r19431 = b;
        double r19432 = r19430 + r19431;
        double r19433 = r19432 * r19429;
        double r19434 = exp(r19433);
        double r19435 = 1.0;
        double r19436 = r19434 - r19435;
        double r19437 = r19429 * r19436;
        double r19438 = r19430 * r19429;
        double r19439 = exp(r19438);
        double r19440 = r19439 - r19435;
        double r19441 = r19431 * r19429;
        double r19442 = exp(r19441);
        double r19443 = r19442 - r19435;
        double r19444 = r19440 * r19443;
        double r19445 = r19437 / r19444;
        return r19445;
}


double f_of(float a, float b, float eps) {
        float r19446 = eps;
        float r19447 = a;
        float r19448 = b;
        float r19449 = r19447 + r19448;
        float r19450 = r19449 * r19446;
        float r19451 = exp(r19450);
        float r19452 = 1.0f;
        float r19453 = r19451 - r19452;
        float r19454 = r19446 * r19453;
        float r19455 = r19447 * r19446;
        float r19456 = exp(r19455);
        float r19457 = r19456 - r19452;
        float r19458 = r19448 * r19446;
        float r19459 = exp(r19458);
        float r19460 = r19459 - r19452;
        float r19461 = r19457 * r19460;
        float r19462 = r19454 / r19461;
        float r19463 = -1.4449365230670285e-180f;
        bool r19464 = r19462 <= r19463;
        float r19465 = r19452 / r19448;
        float r19466 = r19452 / r19447;
        float r19467 = r19465 + r19466;
        float r19468 = 2.5007607876802412e-113f;
        bool r19469 = r19462 <= r19468;
        float r19470 = r19469 ? r19467 : r19467;
        float r19471 = r19464 ? r19467 : r19470;
        return r19471;
}

double f_od(double a, double b, double eps) {
        double r19472 = eps;
        double r19473 = a;
        double r19474 = b;
        double r19475 = r19473 + r19474;
        double r19476 = r19475 * r19472;
        double r19477 = exp(r19476);
        double r19478 = 1.0;
        double r19479 = r19477 - r19478;
        double r19480 = r19472 * r19479;
        double r19481 = r19473 * r19472;
        double r19482 = exp(r19481);
        double r19483 = r19482 - r19478;
        double r19484 = r19474 * r19472;
        double r19485 = exp(r19484);
        double r19486 = r19485 - r19478;
        double r19487 = r19483 * r19486;
        double r19488 = r19480 / r19487;
        double r19489 = -1.4449365230670285e-180;
        bool r19490 = r19488 <= r19489;
        double r19491 = r19478 / r19474;
        double r19492 = r19478 / r19473;
        double r19493 = r19491 + r19492;
        double r19494 = 2.5007607876802412e-113;
        bool r19495 = r19488 <= r19494;
        double r19496 = r19495 ? r19493 : r19493;
        double r19497 = r19490 ? r19493 : r19496;
        return r19497;
}

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 r19498, r19499, r19500, r19501, r19502, r19503, r19504, r19505, r19506, r19507, r19508, r19509, r19510, r19511, r19512, r19513, r19514;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19498);
        mpfr_init(r19499);
        mpfr_init(r19500);
        mpfr_init(r19501);
        mpfr_init(r19502);
        mpfr_init(r19503);
        mpfr_init_set_str(r19504, "1", 10, MPFR_RNDN);
        mpfr_init(r19505);
        mpfr_init(r19506);
        mpfr_init(r19507);
        mpfr_init(r19508);
        mpfr_init(r19509);
        mpfr_init(r19510);
        mpfr_init(r19511);
        mpfr_init(r19512);
        mpfr_init(r19513);
        mpfr_init(r19514);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r19498, eps, MPFR_RNDN);
        mpfr_set_d(r19499, a, MPFR_RNDN);
        mpfr_set_d(r19500, b, MPFR_RNDN);
        mpfr_add(r19501, r19499, r19500, MPFR_RNDN);
        mpfr_mul(r19502, r19501, r19498, MPFR_RNDN);
        mpfr_exp(r19503, r19502, MPFR_RNDN);
        ;
        mpfr_sub(r19505, r19503, r19504, MPFR_RNDN);
        mpfr_mul(r19506, r19498, r19505, MPFR_RNDN);
        mpfr_mul(r19507, r19499, r19498, MPFR_RNDN);
        mpfr_exp(r19508, r19507, MPFR_RNDN);
        mpfr_sub(r19509, r19508, r19504, MPFR_RNDN);
        mpfr_mul(r19510, r19500, r19498, MPFR_RNDN);
        mpfr_exp(r19511, r19510, MPFR_RNDN);
        mpfr_sub(r19512, r19511, r19504, MPFR_RNDN);
        mpfr_mul(r19513, r19509, r19512, MPFR_RNDN);
        mpfr_div(r19514, r19506, r19513, MPFR_RNDN);
        return mpfr_get_d(r19514, MPFR_RNDN);
}

static mpfr_t r19515, r19516, r19517, r19518, r19519, r19520, r19521, r19522, r19523, r19524, r19525, r19526, r19527, r19528, r19529, r19530, r19531, r19532, r19533, r19534, r19535, r19536, r19537, r19538, r19539, r19540;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19515);
        mpfr_init(r19516);
        mpfr_init(r19517);
        mpfr_init(r19518);
        mpfr_init(r19519);
        mpfr_init(r19520);
        mpfr_init_set_str(r19521, "1", 10, MPFR_RNDN);
        mpfr_init(r19522);
        mpfr_init(r19523);
        mpfr_init(r19524);
        mpfr_init(r19525);
        mpfr_init(r19526);
        mpfr_init(r19527);
        mpfr_init(r19528);
        mpfr_init(r19529);
        mpfr_init(r19530);
        mpfr_init(r19531);
        mpfr_init_set_str(r19532, "-1.4449365230670285e-180", 10, MPFR_RNDN);
        mpfr_init(r19533);
        mpfr_init(r19534);
        mpfr_init(r19535);
        mpfr_init(r19536);
        mpfr_init_set_str(r19537, "2.5007607876802412e-113", 10, MPFR_RNDN);
        mpfr_init(r19538);
        mpfr_init(r19539);
        mpfr_init(r19540);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r19515, eps, MPFR_RNDN);
        mpfr_set_d(r19516, a, MPFR_RNDN);
        mpfr_set_d(r19517, b, MPFR_RNDN);
        mpfr_add(r19518, r19516, r19517, MPFR_RNDN);
        mpfr_mul(r19519, r19518, r19515, MPFR_RNDN);
        mpfr_exp(r19520, r19519, MPFR_RNDN);
        ;
        mpfr_sub(r19522, r19520, r19521, MPFR_RNDN);
        mpfr_mul(r19523, r19515, r19522, MPFR_RNDN);
        mpfr_mul(r19524, r19516, r19515, MPFR_RNDN);
        mpfr_exp(r19525, r19524, MPFR_RNDN);
        mpfr_sub(r19526, r19525, r19521, MPFR_RNDN);
        mpfr_mul(r19527, r19517, r19515, MPFR_RNDN);
        mpfr_exp(r19528, r19527, MPFR_RNDN);
        mpfr_sub(r19529, r19528, r19521, MPFR_RNDN);
        mpfr_mul(r19530, r19526, r19529, MPFR_RNDN);
        mpfr_div(r19531, r19523, r19530, MPFR_RNDN);
        ;
        mpfr_set_si(r19533, mpfr_cmp(r19531, r19532) <= 0, MPFR_RNDN);
        mpfr_div(r19534, r19521, r19517, MPFR_RNDN);
        mpfr_div(r19535, r19521, r19516, MPFR_RNDN);
        mpfr_add(r19536, r19534, r19535, MPFR_RNDN);
        ;
        mpfr_set_si(r19538, mpfr_cmp(r19531, r19537) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r19538, MPFR_RNDN)) { mpfr_set(r19539, r19536, MPFR_RNDN); } else { mpfr_set(r19539, r19536, MPFR_RNDN); };
        if (mpfr_get_si(r19533, MPFR_RNDN)) { mpfr_set(r19540, r19536, MPFR_RNDN); } else { mpfr_set(r19540, r19539, MPFR_RNDN); };
        return mpfr_get_d(r19540, MPFR_RNDN);
}

static mpfr_t r19541, r19542, r19543, r19544, r19545, r19546, r19547, r19548, r19549, r19550, r19551, r19552, r19553, r19554, r19555, r19556, r19557, r19558, r19559, r19560, r19561, r19562, r19563, r19564, r19565, r19566;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19541);
        mpfr_init(r19542);
        mpfr_init(r19543);
        mpfr_init(r19544);
        mpfr_init(r19545);
        mpfr_init(r19546);
        mpfr_init_set_str(r19547, "1", 10, MPFR_RNDN);
        mpfr_init(r19548);
        mpfr_init(r19549);
        mpfr_init(r19550);
        mpfr_init(r19551);
        mpfr_init(r19552);
        mpfr_init(r19553);
        mpfr_init(r19554);
        mpfr_init(r19555);
        mpfr_init(r19556);
        mpfr_init(r19557);
        mpfr_init_set_str(r19558, "-1.4449365230670285e-180", 10, MPFR_RNDN);
        mpfr_init(r19559);
        mpfr_init(r19560);
        mpfr_init(r19561);
        mpfr_init(r19562);
        mpfr_init_set_str(r19563, "2.5007607876802412e-113", 10, MPFR_RNDN);
        mpfr_init(r19564);
        mpfr_init(r19565);
        mpfr_init(r19566);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r19541, eps, MPFR_RNDN);
        mpfr_set_d(r19542, a, MPFR_RNDN);
        mpfr_set_d(r19543, b, MPFR_RNDN);
        mpfr_add(r19544, r19542, r19543, MPFR_RNDN);
        mpfr_mul(r19545, r19544, r19541, MPFR_RNDN);
        mpfr_exp(r19546, r19545, MPFR_RNDN);
        ;
        mpfr_sub(r19548, r19546, r19547, MPFR_RNDN);
        mpfr_mul(r19549, r19541, r19548, MPFR_RNDN);
        mpfr_mul(r19550, r19542, r19541, MPFR_RNDN);
        mpfr_exp(r19551, r19550, MPFR_RNDN);
        mpfr_sub(r19552, r19551, r19547, MPFR_RNDN);
        mpfr_mul(r19553, r19543, r19541, MPFR_RNDN);
        mpfr_exp(r19554, r19553, MPFR_RNDN);
        mpfr_sub(r19555, r19554, r19547, MPFR_RNDN);
        mpfr_mul(r19556, r19552, r19555, MPFR_RNDN);
        mpfr_div(r19557, r19549, r19556, MPFR_RNDN);
        ;
        mpfr_set_si(r19559, mpfr_cmp(r19557, r19558) <= 0, MPFR_RNDN);
        mpfr_div(r19560, r19547, r19543, MPFR_RNDN);
        mpfr_div(r19561, r19547, r19542, MPFR_RNDN);
        mpfr_add(r19562, r19560, r19561, MPFR_RNDN);
        ;
        mpfr_set_si(r19564, mpfr_cmp(r19557, r19563) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r19564, MPFR_RNDN)) { mpfr_set(r19565, r19562, MPFR_RNDN); } else { mpfr_set(r19565, r19562, MPFR_RNDN); };
        if (mpfr_get_si(r19559, MPFR_RNDN)) { mpfr_set(r19566, r19562, MPFR_RNDN); } else { mpfr_set(r19566, r19565, MPFR_RNDN); };
        return mpfr_get_d(r19566, MPFR_RNDN);
}

