#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 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;
        return r26658;
}

double f_id(double a, double b, double eps) {
        double r26659 = eps;
        double r26660 = a;
        double r26661 = b;
        double r26662 = r26660 + r26661;
        double r26663 = r26662 * r26659;
        double r26664 = exp(r26663);
        double r26665 = 1;
        double r26666 = r26664 - r26665;
        double r26667 = r26659 * r26666;
        double r26668 = r26660 * r26659;
        double r26669 = exp(r26668);
        double r26670 = r26669 - r26665;
        double r26671 = r26661 * r26659;
        double r26672 = exp(r26671);
        double r26673 = r26672 - r26665;
        double r26674 = r26670 * r26673;
        double r26675 = r26667 / r26674;
        return r26675;
}


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

double f_od(double a, double b, double eps) {
        double r26706 = eps;
        double r26707 = a;
        double r26708 = b;
        double r26709 = r26707 + r26708;
        double r26710 = r26709 * r26706;
        double r26711 = exp(r26710);
        double r26712 = 1;
        double r26713 = r26711 - r26712;
        double r26714 = r26706 * r26713;
        double r26715 = r26707 * r26706;
        double r26716 = exp(r26715);
        double r26717 = r26716 - r26712;
        double r26718 = r26708 * r26706;
        double r26719 = exp(r26718);
        double r26720 = r26719 - r26712;
        double r26721 = r26717 * r26720;
        double r26722 = r26714 / r26721;
        double r26723 = -1.8209574673232353e-151;
        bool r26724 = r26722 <= r26723;
        double r26725 = r26712 / r26708;
        double r26726 = r26712 / r26707;
        double r26727 = r26725 + r26726;
        double r26728 = 4.656049823088307e-98;
        bool r26729 = r26722 <= r26728;
        double r26730 = exp(r26717);
        double r26731 = log(r26730);
        double r26732 = r26731 * r26720;
        double r26733 = r26714 / r26732;
        double r26734 = r26729 ? r26733 : r26727;
        double r26735 = r26724 ? r26727 : r26734;
        return r26735;
}

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 r26736, r26737, r26738, r26739, r26740, r26741, r26742, r26743, r26744, r26745, r26746, r26747, r26748, r26749, r26750, r26751, r26752;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26736);
        mpfr_init(r26737);
        mpfr_init(r26738);
        mpfr_init(r26739);
        mpfr_init(r26740);
        mpfr_init(r26741);
        mpfr_init_set_str(r26742, "1", 10, MPFR_RNDN);
        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(r26751);
        mpfr_init(r26752);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r26736, eps, MPFR_RNDN);
        mpfr_set_d(r26737, a, MPFR_RNDN);
        mpfr_set_d(r26738, b, MPFR_RNDN);
        mpfr_add(r26739, r26737, r26738, MPFR_RNDN);
        mpfr_mul(r26740, r26739, r26736, MPFR_RNDN);
        mpfr_exp(r26741, r26740, MPFR_RNDN);
        ;
        mpfr_sub(r26743, r26741, r26742, MPFR_RNDN);
        mpfr_mul(r26744, r26736, r26743, MPFR_RNDN);
        mpfr_mul(r26745, r26737, r26736, MPFR_RNDN);
        mpfr_exp(r26746, r26745, MPFR_RNDN);
        mpfr_sub(r26747, r26746, r26742, MPFR_RNDN);
        mpfr_mul(r26748, r26738, r26736, MPFR_RNDN);
        mpfr_exp(r26749, r26748, MPFR_RNDN);
        mpfr_sub(r26750, r26749, r26742, MPFR_RNDN);
        mpfr_mul(r26751, r26747, r26750, MPFR_RNDN);
        mpfr_div(r26752, r26744, r26751, MPFR_RNDN);
        return mpfr_get_d(r26752, MPFR_RNDN);
}

static mpfr_t r26753, r26754, 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;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26753);
        mpfr_init(r26754);
        mpfr_init(r26755);
        mpfr_init(r26756);
        mpfr_init(r26757);
        mpfr_init(r26758);
        mpfr_init_set_str(r26759, "1", 10, MPFR_RNDN);
        mpfr_init(r26760);
        mpfr_init(r26761);
        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_set_str(r26770, "-1.8209574673232353e-151", 10, MPFR_RNDN);
        mpfr_init(r26771);
        mpfr_init(r26772);
        mpfr_init(r26773);
        mpfr_init(r26774);
        mpfr_init_set_str(r26775, "4.656049823088307e-98", 10, MPFR_RNDN);
        mpfr_init(r26776);
        mpfr_init(r26777);
        mpfr_init(r26778);
        mpfr_init(r26779);
        mpfr_init(r26780);
        mpfr_init(r26781);
        mpfr_init(r26782);
}

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

static mpfr_t r26783, r26784, r26785, r26786, r26787, r26788, r26789, r26790, r26791, r26792, r26793, r26794, r26795, r26796, r26797, r26798, r26799, r26800, r26801, r26802, r26803, r26804, r26805, r26806, r26807, r26808, r26809, r26810, r26811, r26812;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26783);
        mpfr_init(r26784);
        mpfr_init(r26785);
        mpfr_init(r26786);
        mpfr_init(r26787);
        mpfr_init(r26788);
        mpfr_init_set_str(r26789, "1", 10, MPFR_RNDN);
        mpfr_init(r26790);
        mpfr_init(r26791);
        mpfr_init(r26792);
        mpfr_init(r26793);
        mpfr_init(r26794);
        mpfr_init(r26795);
        mpfr_init(r26796);
        mpfr_init(r26797);
        mpfr_init(r26798);
        mpfr_init(r26799);
        mpfr_init_set_str(r26800, "-1.8209574673232353e-151", 10, MPFR_RNDN);
        mpfr_init(r26801);
        mpfr_init(r26802);
        mpfr_init(r26803);
        mpfr_init(r26804);
        mpfr_init_set_str(r26805, "4.656049823088307e-98", 10, MPFR_RNDN);
        mpfr_init(r26806);
        mpfr_init(r26807);
        mpfr_init(r26808);
        mpfr_init(r26809);
        mpfr_init(r26810);
        mpfr_init(r26811);
        mpfr_init(r26812);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r26783, eps, MPFR_RNDN);
        mpfr_set_d(r26784, a, MPFR_RNDN);
        mpfr_set_d(r26785, b, MPFR_RNDN);
        mpfr_add(r26786, r26784, r26785, MPFR_RNDN);
        mpfr_mul(r26787, r26786, r26783, MPFR_RNDN);
        mpfr_exp(r26788, r26787, MPFR_RNDN);
        ;
        mpfr_sub(r26790, r26788, r26789, MPFR_RNDN);
        mpfr_mul(r26791, r26783, r26790, MPFR_RNDN);
        mpfr_mul(r26792, r26784, r26783, MPFR_RNDN);
        mpfr_exp(r26793, r26792, MPFR_RNDN);
        mpfr_sub(r26794, r26793, r26789, MPFR_RNDN);
        mpfr_mul(r26795, r26785, r26783, MPFR_RNDN);
        mpfr_exp(r26796, r26795, MPFR_RNDN);
        mpfr_sub(r26797, r26796, r26789, MPFR_RNDN);
        mpfr_mul(r26798, r26794, r26797, MPFR_RNDN);
        mpfr_div(r26799, r26791, r26798, MPFR_RNDN);
        ;
        mpfr_set_si(r26801, mpfr_cmp(r26799, r26800) <= 0, MPFR_RNDN);
        mpfr_div(r26802, r26789, r26785, MPFR_RNDN);
        mpfr_div(r26803, r26789, r26784, MPFR_RNDN);
        mpfr_add(r26804, r26802, r26803, MPFR_RNDN);
        ;
        mpfr_set_si(r26806, mpfr_cmp(r26799, r26805) <= 0, MPFR_RNDN);
        mpfr_exp(r26807, r26794, MPFR_RNDN);
        mpfr_log(r26808, r26807, MPFR_RNDN);
        mpfr_mul(r26809, r26808, r26797, MPFR_RNDN);
        mpfr_div(r26810, r26791, r26809, MPFR_RNDN);
        if (mpfr_get_si(r26806, MPFR_RNDN)) { mpfr_set(r26811, r26810, MPFR_RNDN); } else { mpfr_set(r26811, r26804, MPFR_RNDN); };
        if (mpfr_get_si(r26801, MPFR_RNDN)) { mpfr_set(r26812, r26804, MPFR_RNDN); } else { mpfr_set(r26812, r26811, MPFR_RNDN); };
        return mpfr_get_d(r26812, MPFR_RNDN);
}

