#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 r26608 = eps;
        float r26609 = a;
        float r26610 = b;
        float r26611 = r26609 + r26610;
        float r26612 = r26611 * r26608;
        float r26613 = exp(r26612);
        float r26614 = 1;
        float r26615 = r26613 - r26614;
        float r26616 = r26608 * r26615;
        float r26617 = r26609 * r26608;
        float r26618 = exp(r26617);
        float r26619 = r26618 - r26614;
        float r26620 = r26610 * r26608;
        float r26621 = exp(r26620);
        float r26622 = r26621 - r26614;
        float r26623 = r26619 * r26622;
        float r26624 = r26616 / r26623;
        return r26624;
}

double f_id(double a, double b, double eps) {
        double r26625 = eps;
        double r26626 = a;
        double r26627 = b;
        double r26628 = r26626 + r26627;
        double r26629 = r26628 * r26625;
        double r26630 = exp(r26629);
        double r26631 = 1;
        double r26632 = r26630 - r26631;
        double r26633 = r26625 * r26632;
        double r26634 = r26626 * r26625;
        double r26635 = exp(r26634);
        double r26636 = r26635 - r26631;
        double r26637 = r26627 * r26625;
        double r26638 = exp(r26637);
        double r26639 = r26638 - r26631;
        double r26640 = r26636 * r26639;
        double r26641 = r26633 / r26640;
        return r26641;
}


double f_of(float a, float b, float eps) {
        float r26642 = eps;
        float r26643 = a;
        float r26644 = b;
        float r26645 = r26643 + r26644;
        float r26646 = r26645 * r26642;
        float r26647 = exp(r26646);
        float r26648 = 1;
        float r26649 = r26647 - r26648;
        float r26650 = r26642 * r26649;
        float r26651 = r26643 * r26642;
        float r26652 = exp(r26651);
        float r26653 = r26652 - r26648;
        float r26654 = r26644 * r26642;
        float r26655 = exp(r26654);
        float r26656 = r26655 - r26648;
        float r26657 = r26653 * r26656;
        float r26658 = r26650 / r26657;
        float r26659 = -1.7836187891635008e+308;
        bool r26660 = r26658 <= r26659;
        float r26661 = r26648 / r26644;
        float r26662 = r26644 / r26643;
        float r26663 = r26648 - r26662;
        float r26664 = r26661 / r26663;
        float r26665 = r26648 / r26643;
        float r26666 = r26643 / r26644;
        float r26667 = r26666 - r26648;
        float r26668 = r26665 / r26667;
        float r26669 = r26664 - r26668;
        float r26670 = 1.781894697276848e+308;
        bool r26671 = r26658 <= r26670;
        float r26672 = r26671 ? r26658 : r26669;
        float r26673 = r26660 ? r26669 : r26672;
        return r26673;
}

double f_od(double a, double b, double eps) {
        double r26674 = eps;
        double r26675 = a;
        double r26676 = b;
        double r26677 = r26675 + r26676;
        double r26678 = r26677 * r26674;
        double r26679 = exp(r26678);
        double r26680 = 1;
        double r26681 = r26679 - r26680;
        double r26682 = r26674 * r26681;
        double r26683 = r26675 * r26674;
        double r26684 = exp(r26683);
        double r26685 = r26684 - r26680;
        double r26686 = r26676 * r26674;
        double r26687 = exp(r26686);
        double r26688 = r26687 - r26680;
        double r26689 = r26685 * r26688;
        double r26690 = r26682 / r26689;
        double r26691 = -1.7836187891635008e+308;
        bool r26692 = r26690 <= r26691;
        double r26693 = r26680 / r26676;
        double r26694 = r26676 / r26675;
        double r26695 = r26680 - r26694;
        double r26696 = r26693 / r26695;
        double r26697 = r26680 / r26675;
        double r26698 = r26675 / r26676;
        double r26699 = r26698 - r26680;
        double r26700 = r26697 / r26699;
        double r26701 = r26696 - r26700;
        double r26702 = 1.781894697276848e+308;
        bool r26703 = r26690 <= r26702;
        double r26704 = r26703 ? r26690 : r26701;
        double r26705 = r26692 ? r26701 : r26704;
        return r26705;
}

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 r26706, r26707, r26708, r26709, r26710, r26711, r26712, r26713, r26714, r26715, r26716, r26717, r26718, r26719, r26720, r26721, r26722;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26706);
        mpfr_init(r26707);
        mpfr_init(r26708);
        mpfr_init(r26709);
        mpfr_init(r26710);
        mpfr_init(r26711);
        mpfr_init_set_str(r26712, "1", 10, MPFR_RNDN);
        mpfr_init(r26713);
        mpfr_init(r26714);
        mpfr_init(r26715);
        mpfr_init(r26716);
        mpfr_init(r26717);
        mpfr_init(r26718);
        mpfr_init(r26719);
        mpfr_init(r26720);
        mpfr_init(r26721);
        mpfr_init(r26722);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r26706, eps, MPFR_RNDN);
        mpfr_set_d(r26707, a, MPFR_RNDN);
        mpfr_set_d(r26708, b, MPFR_RNDN);
        mpfr_add(r26709, r26707, r26708, MPFR_RNDN);
        mpfr_mul(r26710, r26709, r26706, MPFR_RNDN);
        mpfr_exp(r26711, r26710, MPFR_RNDN);
        ;
        mpfr_sub(r26713, r26711, r26712, MPFR_RNDN);
        mpfr_mul(r26714, r26706, r26713, MPFR_RNDN);
        mpfr_mul(r26715, r26707, r26706, MPFR_RNDN);
        mpfr_exp(r26716, r26715, MPFR_RNDN);
        mpfr_sub(r26717, r26716, r26712, MPFR_RNDN);
        mpfr_mul(r26718, r26708, r26706, MPFR_RNDN);
        mpfr_exp(r26719, r26718, MPFR_RNDN);
        mpfr_sub(r26720, r26719, r26712, MPFR_RNDN);
        mpfr_mul(r26721, r26717, r26720, MPFR_RNDN);
        mpfr_div(r26722, r26714, r26721, MPFR_RNDN);
        return mpfr_get_d(r26722, MPFR_RNDN);
}

static mpfr_t r26723, r26724, r26725, r26726, r26727, r26728, r26729, r26730, r26731, r26732, r26733, r26734, r26735, r26736, r26737, r26738, r26739, r26740, r26741, r26742, r26743, r26744, r26745, r26746, r26747, r26748, r26749, r26750, r26751, r26752, r26753, r26754;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26723);
        mpfr_init(r26724);
        mpfr_init(r26725);
        mpfr_init(r26726);
        mpfr_init(r26727);
        mpfr_init(r26728);
        mpfr_init_set_str(r26729, "1", 10, MPFR_RNDN);
        mpfr_init(r26730);
        mpfr_init(r26731);
        mpfr_init(r26732);
        mpfr_init(r26733);
        mpfr_init(r26734);
        mpfr_init(r26735);
        mpfr_init(r26736);
        mpfr_init(r26737);
        mpfr_init(r26738);
        mpfr_init(r26739);
        mpfr_init_set_str(r26740, "-1.7836187891635008e+308", 10, MPFR_RNDN);
        mpfr_init(r26741);
        mpfr_init(r26742);
        mpfr_init(r26743);
        mpfr_init(r26744);
        mpfr_init(r26745);
        mpfr_init(r26746);
        mpfr_init(r26747);
        mpfr_init(r26748);
        mpfr_init(r26749);
        mpfr_init(r26750);
        mpfr_init_set_str(r26751, "1.781894697276848e+308", 10, MPFR_RNDN);
        mpfr_init(r26752);
        mpfr_init(r26753);
        mpfr_init(r26754);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r26723, eps, MPFR_RNDN);
        mpfr_set_d(r26724, a, MPFR_RNDN);
        mpfr_set_d(r26725, b, MPFR_RNDN);
        mpfr_add(r26726, r26724, r26725, MPFR_RNDN);
        mpfr_mul(r26727, r26726, r26723, MPFR_RNDN);
        mpfr_exp(r26728, r26727, MPFR_RNDN);
        ;
        mpfr_sub(r26730, r26728, r26729, MPFR_RNDN);
        mpfr_mul(r26731, r26723, r26730, MPFR_RNDN);
        mpfr_mul(r26732, r26724, r26723, MPFR_RNDN);
        mpfr_exp(r26733, r26732, MPFR_RNDN);
        mpfr_sub(r26734, r26733, r26729, MPFR_RNDN);
        mpfr_mul(r26735, r26725, r26723, MPFR_RNDN);
        mpfr_exp(r26736, r26735, MPFR_RNDN);
        mpfr_sub(r26737, r26736, r26729, MPFR_RNDN);
        mpfr_mul(r26738, r26734, r26737, MPFR_RNDN);
        mpfr_div(r26739, r26731, r26738, MPFR_RNDN);
        ;
        mpfr_set_si(r26741, mpfr_cmp(r26739, r26740) <= 0, MPFR_RNDN);
        mpfr_div(r26742, r26729, r26725, MPFR_RNDN);
        mpfr_div(r26743, r26725, r26724, MPFR_RNDN);
        mpfr_sub(r26744, r26729, r26743, MPFR_RNDN);
        mpfr_div(r26745, r26742, r26744, MPFR_RNDN);
        mpfr_div(r26746, r26729, r26724, MPFR_RNDN);
        mpfr_div(r26747, r26724, r26725, MPFR_RNDN);
        mpfr_sub(r26748, r26747, r26729, MPFR_RNDN);
        mpfr_div(r26749, r26746, r26748, MPFR_RNDN);
        mpfr_sub(r26750, r26745, r26749, MPFR_RNDN);
        ;
        mpfr_set_si(r26752, mpfr_cmp(r26739, r26751) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r26752, MPFR_RNDN)) { mpfr_set(r26753, r26739, MPFR_RNDN); } else { mpfr_set(r26753, r26750, MPFR_RNDN); };
        if (mpfr_get_si(r26741, MPFR_RNDN)) { mpfr_set(r26754, r26750, MPFR_RNDN); } else { mpfr_set(r26754, r26753, MPFR_RNDN); };
        return mpfr_get_d(r26754, MPFR_RNDN);
}

static mpfr_t r26755, r26756, r26757, r26758, r26759, r26760, r26761, r26762, r26763, r26764, r26765, r26766, r26767, r26768, r26769, r26770, r26771, r26772, r26773, r26774, r26775, r26776, r26777, r26778, r26779, r26780, r26781, r26782, r26783, r26784, r26785, r26786;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26755);
        mpfr_init(r26756);
        mpfr_init(r26757);
        mpfr_init(r26758);
        mpfr_init(r26759);
        mpfr_init(r26760);
        mpfr_init_set_str(r26761, "1", 10, MPFR_RNDN);
        mpfr_init(r26762);
        mpfr_init(r26763);
        mpfr_init(r26764);
        mpfr_init(r26765);
        mpfr_init(r26766);
        mpfr_init(r26767);
        mpfr_init(r26768);
        mpfr_init(r26769);
        mpfr_init(r26770);
        mpfr_init(r26771);
        mpfr_init_set_str(r26772, "-1.7836187891635008e+308", 10, MPFR_RNDN);
        mpfr_init(r26773);
        mpfr_init(r26774);
        mpfr_init(r26775);
        mpfr_init(r26776);
        mpfr_init(r26777);
        mpfr_init(r26778);
        mpfr_init(r26779);
        mpfr_init(r26780);
        mpfr_init(r26781);
        mpfr_init(r26782);
        mpfr_init_set_str(r26783, "1.781894697276848e+308", 10, MPFR_RNDN);
        mpfr_init(r26784);
        mpfr_init(r26785);
        mpfr_init(r26786);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r26755, eps, MPFR_RNDN);
        mpfr_set_d(r26756, a, MPFR_RNDN);
        mpfr_set_d(r26757, b, MPFR_RNDN);
        mpfr_add(r26758, r26756, r26757, MPFR_RNDN);
        mpfr_mul(r26759, r26758, r26755, MPFR_RNDN);
        mpfr_exp(r26760, r26759, MPFR_RNDN);
        ;
        mpfr_sub(r26762, r26760, r26761, MPFR_RNDN);
        mpfr_mul(r26763, r26755, r26762, MPFR_RNDN);
        mpfr_mul(r26764, r26756, r26755, MPFR_RNDN);
        mpfr_exp(r26765, r26764, MPFR_RNDN);
        mpfr_sub(r26766, r26765, r26761, MPFR_RNDN);
        mpfr_mul(r26767, r26757, r26755, MPFR_RNDN);
        mpfr_exp(r26768, r26767, MPFR_RNDN);
        mpfr_sub(r26769, r26768, r26761, MPFR_RNDN);
        mpfr_mul(r26770, r26766, r26769, MPFR_RNDN);
        mpfr_div(r26771, r26763, r26770, MPFR_RNDN);
        ;
        mpfr_set_si(r26773, mpfr_cmp(r26771, r26772) <= 0, MPFR_RNDN);
        mpfr_div(r26774, r26761, r26757, MPFR_RNDN);
        mpfr_div(r26775, r26757, r26756, MPFR_RNDN);
        mpfr_sub(r26776, r26761, r26775, MPFR_RNDN);
        mpfr_div(r26777, r26774, r26776, MPFR_RNDN);
        mpfr_div(r26778, r26761, r26756, MPFR_RNDN);
        mpfr_div(r26779, r26756, r26757, MPFR_RNDN);
        mpfr_sub(r26780, r26779, r26761, MPFR_RNDN);
        mpfr_div(r26781, r26778, r26780, MPFR_RNDN);
        mpfr_sub(r26782, r26777, r26781, MPFR_RNDN);
        ;
        mpfr_set_si(r26784, mpfr_cmp(r26771, r26783) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r26784, MPFR_RNDN)) { mpfr_set(r26785, r26771, MPFR_RNDN); } else { mpfr_set(r26785, r26782, MPFR_RNDN); };
        if (mpfr_get_si(r26773, MPFR_RNDN)) { mpfr_set(r26786, r26782, MPFR_RNDN); } else { mpfr_set(r26786, r26785, MPFR_RNDN); };
        return mpfr_get_d(r26786, MPFR_RNDN);
}

