#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 r26687 = eps;
        float r26688 = a;
        float r26689 = b;
        float r26690 = r26688 + r26689;
        float r26691 = r26690 * r26687;
        float r26692 = exp(r26691);
        float r26693 = 1;
        float r26694 = r26692 - r26693;
        float r26695 = r26687 * r26694;
        float r26696 = r26688 * r26687;
        float r26697 = exp(r26696);
        float r26698 = r26697 - r26693;
        float r26699 = r26689 * r26687;
        float r26700 = exp(r26699);
        float r26701 = r26700 - r26693;
        float r26702 = r26698 * r26701;
        float r26703 = r26695 / r26702;
        return r26703;
}

double f_id(double a, double b, double eps) {
        double r26704 = eps;
        double r26705 = a;
        double r26706 = b;
        double r26707 = r26705 + r26706;
        double r26708 = r26707 * r26704;
        double r26709 = exp(r26708);
        double r26710 = 1;
        double r26711 = r26709 - r26710;
        double r26712 = r26704 * r26711;
        double r26713 = r26705 * r26704;
        double r26714 = exp(r26713);
        double r26715 = r26714 - r26710;
        double r26716 = r26706 * r26704;
        double r26717 = exp(r26716);
        double r26718 = r26717 - r26710;
        double r26719 = r26715 * r26718;
        double r26720 = r26712 / r26719;
        return r26720;
}


double f_of(float a, float b, float eps) {
        float r26721 = eps;
        float r26722 = a;
        float r26723 = b;
        float r26724 = r26722 + r26723;
        float r26725 = r26724 * r26721;
        float r26726 = exp(r26725);
        float r26727 = 1;
        float r26728 = r26726 - r26727;
        float r26729 = r26721 * r26728;
        float r26730 = r26722 * r26721;
        float r26731 = exp(r26730);
        float r26732 = r26731 - r26727;
        float r26733 = r26723 * r26721;
        float r26734 = exp(r26733);
        float r26735 = r26734 - r26727;
        float r26736 = r26732 * r26735;
        float r26737 = r26729 / r26736;
        float r26738 = -1.7827258738114223e+308;
        bool r26739 = r26737 <= r26738;
        float r26740 = r26727 / r26723;
        float r26741 = r26727 / r26722;
        float r26742 = r26740 + r26741;
        float r26743 = 2.1049162263209416e-29;
        bool r26744 = r26737 <= r26743;
        float r26745 = r26744 ? r26737 : r26742;
        float r26746 = r26739 ? r26742 : r26745;
        return r26746;
}

double f_od(double a, double b, double eps) {
        double r26747 = eps;
        double r26748 = a;
        double r26749 = b;
        double r26750 = r26748 + r26749;
        double r26751 = r26750 * r26747;
        double r26752 = exp(r26751);
        double r26753 = 1;
        double r26754 = r26752 - r26753;
        double r26755 = r26747 * r26754;
        double r26756 = r26748 * r26747;
        double r26757 = exp(r26756);
        double r26758 = r26757 - r26753;
        double r26759 = r26749 * r26747;
        double r26760 = exp(r26759);
        double r26761 = r26760 - r26753;
        double r26762 = r26758 * r26761;
        double r26763 = r26755 / r26762;
        double r26764 = -1.7827258738114223e+308;
        bool r26765 = r26763 <= r26764;
        double r26766 = r26753 / r26749;
        double r26767 = r26753 / r26748;
        double r26768 = r26766 + r26767;
        double r26769 = 2.1049162263209416e-29;
        bool r26770 = r26763 <= r26769;
        double r26771 = r26770 ? r26763 : r26768;
        double r26772 = r26765 ? r26768 : r26771;
        return r26772;
}

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 r26773, r26774, r26775, r26776, r26777, r26778, r26779, r26780, r26781, r26782, r26783, r26784, r26785, r26786, r26787, r26788, r26789;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26773);
        mpfr_init(r26774);
        mpfr_init(r26775);
        mpfr_init(r26776);
        mpfr_init(r26777);
        mpfr_init(r26778);
        mpfr_init_set_str(r26779, "1", 10, MPFR_RNDN);
        mpfr_init(r26780);
        mpfr_init(r26781);
        mpfr_init(r26782);
        mpfr_init(r26783);
        mpfr_init(r26784);
        mpfr_init(r26785);
        mpfr_init(r26786);
        mpfr_init(r26787);
        mpfr_init(r26788);
        mpfr_init(r26789);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r26773, eps, MPFR_RNDN);
        mpfr_set_d(r26774, a, MPFR_RNDN);
        mpfr_set_d(r26775, b, MPFR_RNDN);
        mpfr_add(r26776, r26774, r26775, MPFR_RNDN);
        mpfr_mul(r26777, r26776, r26773, MPFR_RNDN);
        mpfr_exp(r26778, r26777, MPFR_RNDN);
        ;
        mpfr_sub(r26780, r26778, r26779, MPFR_RNDN);
        mpfr_mul(r26781, r26773, r26780, MPFR_RNDN);
        mpfr_mul(r26782, r26774, r26773, MPFR_RNDN);
        mpfr_exp(r26783, r26782, MPFR_RNDN);
        mpfr_sub(r26784, r26783, r26779, MPFR_RNDN);
        mpfr_mul(r26785, r26775, r26773, MPFR_RNDN);
        mpfr_exp(r26786, r26785, MPFR_RNDN);
        mpfr_sub(r26787, r26786, r26779, MPFR_RNDN);
        mpfr_mul(r26788, r26784, r26787, MPFR_RNDN);
        mpfr_div(r26789, r26781, r26788, MPFR_RNDN);
        return mpfr_get_d(r26789, MPFR_RNDN);
}

static mpfr_t r26790, r26791, r26792, r26793, r26794, r26795, r26796, r26797, r26798, r26799, r26800, r26801, r26802, r26803, r26804, r26805, r26806, r26807, r26808, r26809, r26810, r26811, r26812, r26813, r26814, r26815;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26790);
        mpfr_init(r26791);
        mpfr_init(r26792);
        mpfr_init(r26793);
        mpfr_init(r26794);
        mpfr_init(r26795);
        mpfr_init_set_str(r26796, "1", 10, MPFR_RNDN);
        mpfr_init(r26797);
        mpfr_init(r26798);
        mpfr_init(r26799);
        mpfr_init(r26800);
        mpfr_init(r26801);
        mpfr_init(r26802);
        mpfr_init(r26803);
        mpfr_init(r26804);
        mpfr_init(r26805);
        mpfr_init(r26806);
        mpfr_init_set_str(r26807, "-1.7827258738114223e+308", 10, MPFR_RNDN);
        mpfr_init(r26808);
        mpfr_init(r26809);
        mpfr_init(r26810);
        mpfr_init(r26811);
        mpfr_init_set_str(r26812, "2.1049162263209416e-29", 10, MPFR_RNDN);
        mpfr_init(r26813);
        mpfr_init(r26814);
        mpfr_init(r26815);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r26790, eps, MPFR_RNDN);
        mpfr_set_d(r26791, a, MPFR_RNDN);
        mpfr_set_d(r26792, b, MPFR_RNDN);
        mpfr_add(r26793, r26791, r26792, MPFR_RNDN);
        mpfr_mul(r26794, r26793, r26790, MPFR_RNDN);
        mpfr_exp(r26795, r26794, MPFR_RNDN);
        ;
        mpfr_sub(r26797, r26795, r26796, MPFR_RNDN);
        mpfr_mul(r26798, r26790, r26797, MPFR_RNDN);
        mpfr_mul(r26799, r26791, r26790, MPFR_RNDN);
        mpfr_exp(r26800, r26799, MPFR_RNDN);
        mpfr_sub(r26801, r26800, r26796, MPFR_RNDN);
        mpfr_mul(r26802, r26792, r26790, MPFR_RNDN);
        mpfr_exp(r26803, r26802, MPFR_RNDN);
        mpfr_sub(r26804, r26803, r26796, MPFR_RNDN);
        mpfr_mul(r26805, r26801, r26804, MPFR_RNDN);
        mpfr_div(r26806, r26798, r26805, MPFR_RNDN);
        ;
        mpfr_set_si(r26808, mpfr_cmp(r26806, r26807) <= 0, MPFR_RNDN);
        mpfr_div(r26809, r26796, r26792, MPFR_RNDN);
        mpfr_div(r26810, r26796, r26791, MPFR_RNDN);
        mpfr_add(r26811, r26809, r26810, MPFR_RNDN);
        ;
        mpfr_set_si(r26813, mpfr_cmp(r26806, r26812) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r26813, MPFR_RNDN)) { mpfr_set(r26814, r26806, MPFR_RNDN); } else { mpfr_set(r26814, r26811, MPFR_RNDN); };
        if (mpfr_get_si(r26808, MPFR_RNDN)) { mpfr_set(r26815, r26811, MPFR_RNDN); } else { mpfr_set(r26815, r26814, MPFR_RNDN); };
        return mpfr_get_d(r26815, MPFR_RNDN);
}

static mpfr_t r26816, r26817, r26818, r26819, r26820, r26821, r26822, r26823, r26824, r26825, r26826, r26827, r26828, r26829, r26830, r26831, r26832, r26833, r26834, r26835, r26836, r26837, r26838, r26839, r26840, r26841;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26816);
        mpfr_init(r26817);
        mpfr_init(r26818);
        mpfr_init(r26819);
        mpfr_init(r26820);
        mpfr_init(r26821);
        mpfr_init_set_str(r26822, "1", 10, MPFR_RNDN);
        mpfr_init(r26823);
        mpfr_init(r26824);
        mpfr_init(r26825);
        mpfr_init(r26826);
        mpfr_init(r26827);
        mpfr_init(r26828);
        mpfr_init(r26829);
        mpfr_init(r26830);
        mpfr_init(r26831);
        mpfr_init(r26832);
        mpfr_init_set_str(r26833, "-1.7827258738114223e+308", 10, MPFR_RNDN);
        mpfr_init(r26834);
        mpfr_init(r26835);
        mpfr_init(r26836);
        mpfr_init(r26837);
        mpfr_init_set_str(r26838, "2.1049162263209416e-29", 10, MPFR_RNDN);
        mpfr_init(r26839);
        mpfr_init(r26840);
        mpfr_init(r26841);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r26816, eps, MPFR_RNDN);
        mpfr_set_d(r26817, a, MPFR_RNDN);
        mpfr_set_d(r26818, b, MPFR_RNDN);
        mpfr_add(r26819, r26817, r26818, MPFR_RNDN);
        mpfr_mul(r26820, r26819, r26816, MPFR_RNDN);
        mpfr_exp(r26821, r26820, MPFR_RNDN);
        ;
        mpfr_sub(r26823, r26821, r26822, MPFR_RNDN);
        mpfr_mul(r26824, r26816, r26823, MPFR_RNDN);
        mpfr_mul(r26825, r26817, r26816, MPFR_RNDN);
        mpfr_exp(r26826, r26825, MPFR_RNDN);
        mpfr_sub(r26827, r26826, r26822, MPFR_RNDN);
        mpfr_mul(r26828, r26818, r26816, MPFR_RNDN);
        mpfr_exp(r26829, r26828, MPFR_RNDN);
        mpfr_sub(r26830, r26829, r26822, MPFR_RNDN);
        mpfr_mul(r26831, r26827, r26830, MPFR_RNDN);
        mpfr_div(r26832, r26824, r26831, MPFR_RNDN);
        ;
        mpfr_set_si(r26834, mpfr_cmp(r26832, r26833) <= 0, MPFR_RNDN);
        mpfr_div(r26835, r26822, r26818, MPFR_RNDN);
        mpfr_div(r26836, r26822, r26817, MPFR_RNDN);
        mpfr_add(r26837, r26835, r26836, MPFR_RNDN);
        ;
        mpfr_set_si(r26839, mpfr_cmp(r26832, r26838) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r26839, MPFR_RNDN)) { mpfr_set(r26840, r26832, MPFR_RNDN); } else { mpfr_set(r26840, r26837, MPFR_RNDN); };
        if (mpfr_get_si(r26834, MPFR_RNDN)) { mpfr_set(r26841, r26837, MPFR_RNDN); } else { mpfr_set(r26841, r26840, MPFR_RNDN); };
        return mpfr_get_d(r26841, MPFR_RNDN);
}

