#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 r10466 = eps;
        float r10467 = a;
        float r10468 = b;
        float r10469 = r10467 + r10468;
        float r10470 = r10469 * r10466;
        float r10471 = exp(r10470);
        float r10472 = 1;
        float r10473 = r10471 - r10472;
        float r10474 = r10466 * r10473;
        float r10475 = r10467 * r10466;
        float r10476 = exp(r10475);
        float r10477 = r10476 - r10472;
        float r10478 = r10468 * r10466;
        float r10479 = exp(r10478);
        float r10480 = r10479 - r10472;
        float r10481 = r10477 * r10480;
        float r10482 = r10474 / r10481;
        return r10482;
}

double f_id(double a, double b, double eps) {
        double r10483 = eps;
        double r10484 = a;
        double r10485 = b;
        double r10486 = r10484 + r10485;
        double r10487 = r10486 * r10483;
        double r10488 = exp(r10487);
        double r10489 = 1;
        double r10490 = r10488 - r10489;
        double r10491 = r10483 * r10490;
        double r10492 = r10484 * r10483;
        double r10493 = exp(r10492);
        double r10494 = r10493 - r10489;
        double r10495 = r10485 * r10483;
        double r10496 = exp(r10495);
        double r10497 = r10496 - r10489;
        double r10498 = r10494 * r10497;
        double r10499 = r10491 / r10498;
        return r10499;
}


double f_of(float a, float b, float eps) {
        float r10500 = eps;
        float r10501 = a;
        float r10502 = b;
        float r10503 = r10501 + r10502;
        float r10504 = r10503 * r10500;
        float r10505 = exp(r10504);
        float r10506 = 1;
        float r10507 = r10505 - r10506;
        float r10508 = r10500 * r10507;
        float r10509 = r10501 * r10500;
        float r10510 = exp(r10509);
        float r10511 = r10510 - r10506;
        float r10512 = r10502 * r10500;
        float r10513 = exp(r10512);
        float r10514 = r10513 - r10506;
        float r10515 = r10511 * r10514;
        float r10516 = r10508 / r10515;
        float r10517 = -1.5418342753582873e-10;
        bool r10518 = r10516 <= r10517;
        float r10519 = r10506 / r10501;
        float r10520 = r10506 / r10502;
        float r10521 = r10519 + r10520;
        float r10522 = 3.1520968034257534e+156;
        bool r10523 = r10516 <= r10522;
        float r10524 = exp(r10511);
        float r10525 = log(r10524);
        float r10526 = r10525 * r10514;
        float r10527 = r10508 / r10526;
        float r10528 = r10523 ? r10527 : r10521;
        float r10529 = r10518 ? r10521 : r10528;
        return r10529;
}

double f_od(double a, double b, double eps) {
        double r10530 = eps;
        double r10531 = a;
        double r10532 = b;
        double r10533 = r10531 + r10532;
        double r10534 = r10533 * r10530;
        double r10535 = exp(r10534);
        double r10536 = 1;
        double r10537 = r10535 - r10536;
        double r10538 = r10530 * r10537;
        double r10539 = r10531 * r10530;
        double r10540 = exp(r10539);
        double r10541 = r10540 - r10536;
        double r10542 = r10532 * r10530;
        double r10543 = exp(r10542);
        double r10544 = r10543 - r10536;
        double r10545 = r10541 * r10544;
        double r10546 = r10538 / r10545;
        double r10547 = -1.5418342753582873e-10;
        bool r10548 = r10546 <= r10547;
        double r10549 = r10536 / r10531;
        double r10550 = r10536 / r10532;
        double r10551 = r10549 + r10550;
        double r10552 = 3.1520968034257534e+156;
        bool r10553 = r10546 <= r10552;
        double r10554 = exp(r10541);
        double r10555 = log(r10554);
        double r10556 = r10555 * r10544;
        double r10557 = r10538 / r10556;
        double r10558 = r10553 ? r10557 : r10551;
        double r10559 = r10548 ? r10551 : r10558;
        return r10559;
}

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 r10560, r10561, r10562, r10563, r10564, r10565, r10566, r10567, r10568, r10569, r10570, r10571, r10572, r10573, r10574, r10575, r10576;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10560);
        mpfr_init(r10561);
        mpfr_init(r10562);
        mpfr_init(r10563);
        mpfr_init(r10564);
        mpfr_init(r10565);
        mpfr_init_set_str(r10566, "1", 10, MPFR_RNDN);
        mpfr_init(r10567);
        mpfr_init(r10568);
        mpfr_init(r10569);
        mpfr_init(r10570);
        mpfr_init(r10571);
        mpfr_init(r10572);
        mpfr_init(r10573);
        mpfr_init(r10574);
        mpfr_init(r10575);
        mpfr_init(r10576);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r10560, eps, MPFR_RNDN);
        mpfr_set_d(r10561, a, MPFR_RNDN);
        mpfr_set_d(r10562, b, MPFR_RNDN);
        mpfr_add(r10563, r10561, r10562, MPFR_RNDN);
        mpfr_mul(r10564, r10563, r10560, MPFR_RNDN);
        mpfr_exp(r10565, r10564, MPFR_RNDN);
        ;
        mpfr_sub(r10567, r10565, r10566, MPFR_RNDN);
        mpfr_mul(r10568, r10560, r10567, MPFR_RNDN);
        mpfr_mul(r10569, r10561, r10560, MPFR_RNDN);
        mpfr_exp(r10570, r10569, MPFR_RNDN);
        mpfr_sub(r10571, r10570, r10566, MPFR_RNDN);
        mpfr_mul(r10572, r10562, r10560, MPFR_RNDN);
        mpfr_exp(r10573, r10572, MPFR_RNDN);
        mpfr_sub(r10574, r10573, r10566, MPFR_RNDN);
        mpfr_mul(r10575, r10571, r10574, MPFR_RNDN);
        mpfr_div(r10576, r10568, r10575, MPFR_RNDN);
        return mpfr_get_d(r10576, MPFR_RNDN);
}

static mpfr_t r10577, r10578, r10579, r10580, r10581, r10582, r10583, r10584, r10585, r10586, r10587, r10588, r10589, r10590, r10591, r10592, r10593, r10594, r10595, r10596, r10597, r10598, r10599, r10600, r10601, r10602, r10603, r10604, r10605, r10606;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10577);
        mpfr_init(r10578);
        mpfr_init(r10579);
        mpfr_init(r10580);
        mpfr_init(r10581);
        mpfr_init(r10582);
        mpfr_init_set_str(r10583, "1", 10, MPFR_RNDN);
        mpfr_init(r10584);
        mpfr_init(r10585);
        mpfr_init(r10586);
        mpfr_init(r10587);
        mpfr_init(r10588);
        mpfr_init(r10589);
        mpfr_init(r10590);
        mpfr_init(r10591);
        mpfr_init(r10592);
        mpfr_init(r10593);
        mpfr_init_set_str(r10594, "-1.5418342753582873e-10", 10, MPFR_RNDN);
        mpfr_init(r10595);
        mpfr_init(r10596);
        mpfr_init(r10597);
        mpfr_init(r10598);
        mpfr_init_set_str(r10599, "3.1520968034257534e+156", 10, MPFR_RNDN);
        mpfr_init(r10600);
        mpfr_init(r10601);
        mpfr_init(r10602);
        mpfr_init(r10603);
        mpfr_init(r10604);
        mpfr_init(r10605);
        mpfr_init(r10606);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r10577, eps, MPFR_RNDN);
        mpfr_set_d(r10578, a, MPFR_RNDN);
        mpfr_set_d(r10579, b, MPFR_RNDN);
        mpfr_add(r10580, r10578, r10579, MPFR_RNDN);
        mpfr_mul(r10581, r10580, r10577, MPFR_RNDN);
        mpfr_exp(r10582, r10581, MPFR_RNDN);
        ;
        mpfr_sub(r10584, r10582, r10583, MPFR_RNDN);
        mpfr_mul(r10585, r10577, r10584, MPFR_RNDN);
        mpfr_mul(r10586, r10578, r10577, MPFR_RNDN);
        mpfr_exp(r10587, r10586, MPFR_RNDN);
        mpfr_sub(r10588, r10587, r10583, MPFR_RNDN);
        mpfr_mul(r10589, r10579, r10577, MPFR_RNDN);
        mpfr_exp(r10590, r10589, MPFR_RNDN);
        mpfr_sub(r10591, r10590, r10583, MPFR_RNDN);
        mpfr_mul(r10592, r10588, r10591, MPFR_RNDN);
        mpfr_div(r10593, r10585, r10592, MPFR_RNDN);
        ;
        mpfr_set_si(r10595, mpfr_cmp(r10593, r10594) <= 0, MPFR_RNDN);
        mpfr_div(r10596, r10583, r10578, MPFR_RNDN);
        mpfr_div(r10597, r10583, r10579, MPFR_RNDN);
        mpfr_add(r10598, r10596, r10597, MPFR_RNDN);
        ;
        mpfr_set_si(r10600, mpfr_cmp(r10593, r10599) <= 0, MPFR_RNDN);
        mpfr_exp(r10601, r10588, MPFR_RNDN);
        mpfr_log(r10602, r10601, MPFR_RNDN);
        mpfr_mul(r10603, r10602, r10591, MPFR_RNDN);
        mpfr_div(r10604, r10585, r10603, MPFR_RNDN);
        if (mpfr_get_si(r10600, MPFR_RNDN)) { mpfr_set(r10605, r10604, MPFR_RNDN); } else { mpfr_set(r10605, r10598, MPFR_RNDN); };
        if (mpfr_get_si(r10595, MPFR_RNDN)) { mpfr_set(r10606, r10598, MPFR_RNDN); } else { mpfr_set(r10606, r10605, MPFR_RNDN); };
        return mpfr_get_d(r10606, MPFR_RNDN);
}

static mpfr_t r10607, r10608, r10609, r10610, r10611, r10612, r10613, r10614, r10615, r10616, r10617, r10618, r10619, r10620, r10621, r10622, r10623, r10624, r10625, r10626, r10627, r10628, r10629, r10630, r10631, r10632, r10633, r10634, r10635, r10636;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10607);
        mpfr_init(r10608);
        mpfr_init(r10609);
        mpfr_init(r10610);
        mpfr_init(r10611);
        mpfr_init(r10612);
        mpfr_init_set_str(r10613, "1", 10, MPFR_RNDN);
        mpfr_init(r10614);
        mpfr_init(r10615);
        mpfr_init(r10616);
        mpfr_init(r10617);
        mpfr_init(r10618);
        mpfr_init(r10619);
        mpfr_init(r10620);
        mpfr_init(r10621);
        mpfr_init(r10622);
        mpfr_init(r10623);
        mpfr_init_set_str(r10624, "-1.5418342753582873e-10", 10, MPFR_RNDN);
        mpfr_init(r10625);
        mpfr_init(r10626);
        mpfr_init(r10627);
        mpfr_init(r10628);
        mpfr_init_set_str(r10629, "3.1520968034257534e+156", 10, MPFR_RNDN);
        mpfr_init(r10630);
        mpfr_init(r10631);
        mpfr_init(r10632);
        mpfr_init(r10633);
        mpfr_init(r10634);
        mpfr_init(r10635);
        mpfr_init(r10636);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r10607, eps, MPFR_RNDN);
        mpfr_set_d(r10608, a, MPFR_RNDN);
        mpfr_set_d(r10609, b, MPFR_RNDN);
        mpfr_add(r10610, r10608, r10609, MPFR_RNDN);
        mpfr_mul(r10611, r10610, r10607, MPFR_RNDN);
        mpfr_exp(r10612, r10611, MPFR_RNDN);
        ;
        mpfr_sub(r10614, r10612, r10613, MPFR_RNDN);
        mpfr_mul(r10615, r10607, r10614, MPFR_RNDN);
        mpfr_mul(r10616, r10608, r10607, MPFR_RNDN);
        mpfr_exp(r10617, r10616, MPFR_RNDN);
        mpfr_sub(r10618, r10617, r10613, MPFR_RNDN);
        mpfr_mul(r10619, r10609, r10607, MPFR_RNDN);
        mpfr_exp(r10620, r10619, MPFR_RNDN);
        mpfr_sub(r10621, r10620, r10613, MPFR_RNDN);
        mpfr_mul(r10622, r10618, r10621, MPFR_RNDN);
        mpfr_div(r10623, r10615, r10622, MPFR_RNDN);
        ;
        mpfr_set_si(r10625, mpfr_cmp(r10623, r10624) <= 0, MPFR_RNDN);
        mpfr_div(r10626, r10613, r10608, MPFR_RNDN);
        mpfr_div(r10627, r10613, r10609, MPFR_RNDN);
        mpfr_add(r10628, r10626, r10627, MPFR_RNDN);
        ;
        mpfr_set_si(r10630, mpfr_cmp(r10623, r10629) <= 0, MPFR_RNDN);
        mpfr_exp(r10631, r10618, MPFR_RNDN);
        mpfr_log(r10632, r10631, MPFR_RNDN);
        mpfr_mul(r10633, r10632, r10621, MPFR_RNDN);
        mpfr_div(r10634, r10615, r10633, MPFR_RNDN);
        if (mpfr_get_si(r10630, MPFR_RNDN)) { mpfr_set(r10635, r10634, MPFR_RNDN); } else { mpfr_set(r10635, r10628, MPFR_RNDN); };
        if (mpfr_get_si(r10625, MPFR_RNDN)) { mpfr_set(r10636, r10628, MPFR_RNDN); } else { mpfr_set(r10636, r10635, MPFR_RNDN); };
        return mpfr_get_d(r10636, MPFR_RNDN);
}

