#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 r10514 = eps;
        float r10515 = a;
        float r10516 = b;
        float r10517 = r10515 + r10516;
        float r10518 = r10517 * r10514;
        float r10519 = exp(r10518);
        float r10520 = 1;
        float r10521 = r10519 - r10520;
        float r10522 = r10514 * r10521;
        float r10523 = r10515 * r10514;
        float r10524 = exp(r10523);
        float r10525 = r10524 - r10520;
        float r10526 = r10516 * r10514;
        float r10527 = exp(r10526);
        float r10528 = r10527 - r10520;
        float r10529 = r10525 * r10528;
        float r10530 = r10522 / r10529;
        return r10530;
}

double f_id(double a, double b, double eps) {
        double r10531 = eps;
        double r10532 = a;
        double r10533 = b;
        double r10534 = r10532 + r10533;
        double r10535 = r10534 * r10531;
        double r10536 = exp(r10535);
        double r10537 = 1;
        double r10538 = r10536 - r10537;
        double r10539 = r10531 * r10538;
        double r10540 = r10532 * r10531;
        double r10541 = exp(r10540);
        double r10542 = r10541 - r10537;
        double r10543 = r10533 * r10531;
        double r10544 = exp(r10543);
        double r10545 = r10544 - r10537;
        double r10546 = r10542 * r10545;
        double r10547 = r10539 / r10546;
        return r10547;
}


double f_of(float a, float b, float eps) {
        float r10548 = eps;
        float r10549 = a;
        float r10550 = b;
        float r10551 = r10549 + r10550;
        float r10552 = r10551 * r10548;
        float r10553 = exp(r10552);
        float r10554 = 1;
        float r10555 = r10553 - r10554;
        float r10556 = r10548 * r10555;
        float r10557 = r10549 * r10548;
        float r10558 = exp(r10557);
        float r10559 = r10558 - r10554;
        float r10560 = r10550 * r10548;
        float r10561 = exp(r10560);
        float r10562 = r10561 - r10554;
        float r10563 = r10559 * r10562;
        float r10564 = r10556 / r10563;
        float r10565 = -0.050754319712540484;
        bool r10566 = r10564 <= r10565;
        float r10567 = r10554 / r10549;
        float r10568 = r10554 / r10550;
        float r10569 = r10567 + r10568;
        float r10570 = 1.510964935016651e+188;
        bool r10571 = r10564 <= r10570;
        float r10572 = r10548 * r10549;
        float r10573 = expm1(r10572);
        float r10574 = r10548 / r10573;
        float r10575 = r10550 + r10549;
        float r10576 = r10575 * r10548;
        float r10577 = expm1(r10576);
        float r10578 = r10548 * r10550;
        float r10579 = expm1(r10578);
        float r10580 = r10577 / r10579;
        float r10581 = r10574 * r10580;
        float r10582 = r10571 ? r10581 : r10569;
        float r10583 = r10566 ? r10569 : r10582;
        return r10583;
}

double f_od(double a, double b, double eps) {
        double r10584 = eps;
        double r10585 = a;
        double r10586 = b;
        double r10587 = r10585 + r10586;
        double r10588 = r10587 * r10584;
        double r10589 = exp(r10588);
        double r10590 = 1;
        double r10591 = r10589 - r10590;
        double r10592 = r10584 * r10591;
        double r10593 = r10585 * r10584;
        double r10594 = exp(r10593);
        double r10595 = r10594 - r10590;
        double r10596 = r10586 * r10584;
        double r10597 = exp(r10596);
        double r10598 = r10597 - r10590;
        double r10599 = r10595 * r10598;
        double r10600 = r10592 / r10599;
        double r10601 = -0.050754319712540484;
        bool r10602 = r10600 <= r10601;
        double r10603 = r10590 / r10585;
        double r10604 = r10590 / r10586;
        double r10605 = r10603 + r10604;
        double r10606 = 1.510964935016651e+188;
        bool r10607 = r10600 <= r10606;
        double r10608 = r10584 * r10585;
        double r10609 = expm1(r10608);
        double r10610 = r10584 / r10609;
        double r10611 = r10586 + r10585;
        double r10612 = r10611 * r10584;
        double r10613 = expm1(r10612);
        double r10614 = r10584 * r10586;
        double r10615 = expm1(r10614);
        double r10616 = r10613 / r10615;
        double r10617 = r10610 * r10616;
        double r10618 = r10607 ? r10617 : r10605;
        double r10619 = r10602 ? r10605 : r10618;
        return r10619;
}

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 r10620, r10621, r10622, r10623, r10624, r10625, r10626, r10627, r10628, r10629, r10630, r10631, r10632, r10633, r10634, r10635, r10636;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10620);
        mpfr_init(r10621);
        mpfr_init(r10622);
        mpfr_init(r10623);
        mpfr_init(r10624);
        mpfr_init(r10625);
        mpfr_init_set_str(r10626, "1", 10, MPFR_RNDN);
        mpfr_init(r10627);
        mpfr_init(r10628);
        mpfr_init(r10629);
        mpfr_init(r10630);
        mpfr_init(r10631);
        mpfr_init(r10632);
        mpfr_init(r10633);
        mpfr_init(r10634);
        mpfr_init(r10635);
        mpfr_init(r10636);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r10620, eps, MPFR_RNDN);
        mpfr_set_d(r10621, a, MPFR_RNDN);
        mpfr_set_d(r10622, b, MPFR_RNDN);
        mpfr_add(r10623, r10621, r10622, MPFR_RNDN);
        mpfr_mul(r10624, r10623, r10620, MPFR_RNDN);
        mpfr_exp(r10625, r10624, MPFR_RNDN);
        ;
        mpfr_sub(r10627, r10625, r10626, MPFR_RNDN);
        mpfr_mul(r10628, r10620, r10627, MPFR_RNDN);
        mpfr_mul(r10629, r10621, r10620, MPFR_RNDN);
        mpfr_exp(r10630, r10629, MPFR_RNDN);
        mpfr_sub(r10631, r10630, r10626, MPFR_RNDN);
        mpfr_mul(r10632, r10622, r10620, MPFR_RNDN);
        mpfr_exp(r10633, r10632, MPFR_RNDN);
        mpfr_sub(r10634, r10633, r10626, MPFR_RNDN);
        mpfr_mul(r10635, r10631, r10634, MPFR_RNDN);
        mpfr_div(r10636, r10628, r10635, MPFR_RNDN);
        return mpfr_get_d(r10636, MPFR_RNDN);
}

static mpfr_t r10637, r10638, r10639, r10640, r10641, r10642, r10643, r10644, r10645, r10646, r10647, r10648, r10649, r10650, r10651, r10652, r10653, r10654, r10655, r10656, r10657, r10658, r10659, r10660, r10661, r10662, r10663, r10664, r10665, r10666, r10667, r10668, r10669, r10670, r10671, r10672;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10637);
        mpfr_init(r10638);
        mpfr_init(r10639);
        mpfr_init(r10640);
        mpfr_init(r10641);
        mpfr_init(r10642);
        mpfr_init_set_str(r10643, "1", 10, MPFR_RNDN);
        mpfr_init(r10644);
        mpfr_init(r10645);
        mpfr_init(r10646);
        mpfr_init(r10647);
        mpfr_init(r10648);
        mpfr_init(r10649);
        mpfr_init(r10650);
        mpfr_init(r10651);
        mpfr_init(r10652);
        mpfr_init(r10653);
        mpfr_init_set_str(r10654, "-0.050754319712540484", 10, MPFR_RNDN);
        mpfr_init(r10655);
        mpfr_init(r10656);
        mpfr_init(r10657);
        mpfr_init(r10658);
        mpfr_init_set_str(r10659, "1.510964935016651e+188", 10, MPFR_RNDN);
        mpfr_init(r10660);
        mpfr_init(r10661);
        mpfr_init(r10662);
        mpfr_init(r10663);
        mpfr_init(r10664);
        mpfr_init(r10665);
        mpfr_init(r10666);
        mpfr_init(r10667);
        mpfr_init(r10668);
        mpfr_init(r10669);
        mpfr_init(r10670);
        mpfr_init(r10671);
        mpfr_init(r10672);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r10637, eps, MPFR_RNDN);
        mpfr_set_d(r10638, a, MPFR_RNDN);
        mpfr_set_d(r10639, b, MPFR_RNDN);
        mpfr_add(r10640, r10638, r10639, MPFR_RNDN);
        mpfr_mul(r10641, r10640, r10637, MPFR_RNDN);
        mpfr_exp(r10642, r10641, MPFR_RNDN);
        ;
        mpfr_sub(r10644, r10642, r10643, MPFR_RNDN);
        mpfr_mul(r10645, r10637, r10644, MPFR_RNDN);
        mpfr_mul(r10646, r10638, r10637, MPFR_RNDN);
        mpfr_exp(r10647, r10646, MPFR_RNDN);
        mpfr_sub(r10648, r10647, r10643, MPFR_RNDN);
        mpfr_mul(r10649, r10639, r10637, MPFR_RNDN);
        mpfr_exp(r10650, r10649, MPFR_RNDN);
        mpfr_sub(r10651, r10650, r10643, MPFR_RNDN);
        mpfr_mul(r10652, r10648, r10651, MPFR_RNDN);
        mpfr_div(r10653, r10645, r10652, MPFR_RNDN);
        ;
        mpfr_set_si(r10655, mpfr_cmp(r10653, r10654) <= 0, MPFR_RNDN);
        mpfr_div(r10656, r10643, r10638, MPFR_RNDN);
        mpfr_div(r10657, r10643, r10639, MPFR_RNDN);
        mpfr_add(r10658, r10656, r10657, MPFR_RNDN);
        ;
        mpfr_set_si(r10660, mpfr_cmp(r10653, r10659) <= 0, MPFR_RNDN);
        mpfr_mul(r10661, r10637, r10638, MPFR_RNDN);
        mpfr_expm1(r10662, r10661, MPFR_RNDN);
        mpfr_div(r10663, r10637, r10662, MPFR_RNDN);
        mpfr_add(r10664, r10639, r10638, MPFR_RNDN);
        mpfr_mul(r10665, r10664, r10637, MPFR_RNDN);
        mpfr_expm1(r10666, r10665, MPFR_RNDN);
        mpfr_mul(r10667, r10637, r10639, MPFR_RNDN);
        mpfr_expm1(r10668, r10667, MPFR_RNDN);
        mpfr_div(r10669, r10666, r10668, MPFR_RNDN);
        mpfr_mul(r10670, r10663, r10669, MPFR_RNDN);
        if (mpfr_get_si(r10660, MPFR_RNDN)) { mpfr_set(r10671, r10670, MPFR_RNDN); } else { mpfr_set(r10671, r10658, MPFR_RNDN); };
        if (mpfr_get_si(r10655, MPFR_RNDN)) { mpfr_set(r10672, r10658, MPFR_RNDN); } else { mpfr_set(r10672, r10671, MPFR_RNDN); };
        return mpfr_get_d(r10672, MPFR_RNDN);
}

static mpfr_t r10673, r10674, r10675, r10676, r10677, r10678, r10679, r10680, r10681, r10682, r10683, r10684, r10685, r10686, r10687, r10688, r10689, r10690, r10691, r10692, r10693, r10694, r10695, r10696, r10697, r10698, r10699, r10700, r10701, r10702, r10703, r10704, r10705, r10706, r10707, r10708;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10673);
        mpfr_init(r10674);
        mpfr_init(r10675);
        mpfr_init(r10676);
        mpfr_init(r10677);
        mpfr_init(r10678);
        mpfr_init_set_str(r10679, "1", 10, MPFR_RNDN);
        mpfr_init(r10680);
        mpfr_init(r10681);
        mpfr_init(r10682);
        mpfr_init(r10683);
        mpfr_init(r10684);
        mpfr_init(r10685);
        mpfr_init(r10686);
        mpfr_init(r10687);
        mpfr_init(r10688);
        mpfr_init(r10689);
        mpfr_init_set_str(r10690, "-0.050754319712540484", 10, MPFR_RNDN);
        mpfr_init(r10691);
        mpfr_init(r10692);
        mpfr_init(r10693);
        mpfr_init(r10694);
        mpfr_init_set_str(r10695, "1.510964935016651e+188", 10, MPFR_RNDN);
        mpfr_init(r10696);
        mpfr_init(r10697);
        mpfr_init(r10698);
        mpfr_init(r10699);
        mpfr_init(r10700);
        mpfr_init(r10701);
        mpfr_init(r10702);
        mpfr_init(r10703);
        mpfr_init(r10704);
        mpfr_init(r10705);
        mpfr_init(r10706);
        mpfr_init(r10707);
        mpfr_init(r10708);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r10673, eps, MPFR_RNDN);
        mpfr_set_d(r10674, a, MPFR_RNDN);
        mpfr_set_d(r10675, b, MPFR_RNDN);
        mpfr_add(r10676, r10674, r10675, MPFR_RNDN);
        mpfr_mul(r10677, r10676, r10673, MPFR_RNDN);
        mpfr_exp(r10678, r10677, MPFR_RNDN);
        ;
        mpfr_sub(r10680, r10678, r10679, MPFR_RNDN);
        mpfr_mul(r10681, r10673, r10680, MPFR_RNDN);
        mpfr_mul(r10682, r10674, r10673, MPFR_RNDN);
        mpfr_exp(r10683, r10682, MPFR_RNDN);
        mpfr_sub(r10684, r10683, r10679, MPFR_RNDN);
        mpfr_mul(r10685, r10675, r10673, MPFR_RNDN);
        mpfr_exp(r10686, r10685, MPFR_RNDN);
        mpfr_sub(r10687, r10686, r10679, MPFR_RNDN);
        mpfr_mul(r10688, r10684, r10687, MPFR_RNDN);
        mpfr_div(r10689, r10681, r10688, MPFR_RNDN);
        ;
        mpfr_set_si(r10691, mpfr_cmp(r10689, r10690) <= 0, MPFR_RNDN);
        mpfr_div(r10692, r10679, r10674, MPFR_RNDN);
        mpfr_div(r10693, r10679, r10675, MPFR_RNDN);
        mpfr_add(r10694, r10692, r10693, MPFR_RNDN);
        ;
        mpfr_set_si(r10696, mpfr_cmp(r10689, r10695) <= 0, MPFR_RNDN);
        mpfr_mul(r10697, r10673, r10674, MPFR_RNDN);
        mpfr_expm1(r10698, r10697, MPFR_RNDN);
        mpfr_div(r10699, r10673, r10698, MPFR_RNDN);
        mpfr_add(r10700, r10675, r10674, MPFR_RNDN);
        mpfr_mul(r10701, r10700, r10673, MPFR_RNDN);
        mpfr_expm1(r10702, r10701, MPFR_RNDN);
        mpfr_mul(r10703, r10673, r10675, MPFR_RNDN);
        mpfr_expm1(r10704, r10703, MPFR_RNDN);
        mpfr_div(r10705, r10702, r10704, MPFR_RNDN);
        mpfr_mul(r10706, r10699, r10705, MPFR_RNDN);
        if (mpfr_get_si(r10696, MPFR_RNDN)) { mpfr_set(r10707, r10706, MPFR_RNDN); } else { mpfr_set(r10707, r10694, MPFR_RNDN); };
        if (mpfr_get_si(r10691, MPFR_RNDN)) { mpfr_set(r10708, r10694, MPFR_RNDN); } else { mpfr_set(r10708, r10707, MPFR_RNDN); };
        return mpfr_get_d(r10708, MPFR_RNDN);
}

