#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 r10667 = eps;
        float r10668 = a;
        float r10669 = b;
        float r10670 = r10668 + r10669;
        float r10671 = r10670 * r10667;
        float r10672 = exp(r10671);
        float r10673 = 1;
        float r10674 = r10672 - r10673;
        float r10675 = r10667 * r10674;
        float r10676 = r10668 * r10667;
        float r10677 = exp(r10676);
        float r10678 = r10677 - r10673;
        float r10679 = r10669 * r10667;
        float r10680 = exp(r10679);
        float r10681 = r10680 - r10673;
        float r10682 = r10678 * r10681;
        float r10683 = r10675 / r10682;
        return r10683;
}

double f_id(double a, double b, double eps) {
        double r10684 = eps;
        double r10685 = a;
        double r10686 = b;
        double r10687 = r10685 + r10686;
        double r10688 = r10687 * r10684;
        double r10689 = exp(r10688);
        double r10690 = 1;
        double r10691 = r10689 - r10690;
        double r10692 = r10684 * r10691;
        double r10693 = r10685 * r10684;
        double r10694 = exp(r10693);
        double r10695 = r10694 - r10690;
        double r10696 = r10686 * r10684;
        double r10697 = exp(r10696);
        double r10698 = r10697 - r10690;
        double r10699 = r10695 * r10698;
        double r10700 = r10692 / r10699;
        return r10700;
}


double f_of(float a, float b, float eps) {
        float r10701 = eps;
        float r10702 = a;
        float r10703 = b;
        float r10704 = r10702 + r10703;
        float r10705 = r10704 * r10701;
        float r10706 = exp(r10705);
        float r10707 = 1;
        float r10708 = r10706 - r10707;
        float r10709 = r10701 * r10708;
        float r10710 = r10702 * r10701;
        float r10711 = exp(r10710);
        float r10712 = r10711 - r10707;
        float r10713 = r10703 * r10701;
        float r10714 = exp(r10713);
        float r10715 = r10714 - r10707;
        float r10716 = r10712 * r10715;
        float r10717 = r10709 / r10716;
        float r10718 = -6.137427270817618e-20;
        bool r10719 = r10717 <= r10718;
        float r10720 = r10707 / r10703;
        float r10721 = r10707 / r10702;
        float r10722 = r10720 + r10721;
        float r10723 = 1.781441610035736e+308;
        bool r10724 = r10717 <= r10723;
        float r10725 = expm1(r10710);
        float r10726 = r10701 / r10725;
        float r10727 = expm1(r10705);
        float r10728 = r10701 * r10703;
        float r10729 = expm1(r10728);
        float r10730 = r10727 / r10729;
        float r10731 = r10726 * r10730;
        float r10732 = r10724 ? r10731 : r10722;
        float r10733 = r10719 ? r10722 : r10732;
        return r10733;
}

double f_od(double a, double b, double eps) {
        double r10734 = eps;
        double r10735 = a;
        double r10736 = b;
        double r10737 = r10735 + r10736;
        double r10738 = r10737 * r10734;
        double r10739 = exp(r10738);
        double r10740 = 1;
        double r10741 = r10739 - r10740;
        double r10742 = r10734 * r10741;
        double r10743 = r10735 * r10734;
        double r10744 = exp(r10743);
        double r10745 = r10744 - r10740;
        double r10746 = r10736 * r10734;
        double r10747 = exp(r10746);
        double r10748 = r10747 - r10740;
        double r10749 = r10745 * r10748;
        double r10750 = r10742 / r10749;
        double r10751 = -6.137427270817618e-20;
        bool r10752 = r10750 <= r10751;
        double r10753 = r10740 / r10736;
        double r10754 = r10740 / r10735;
        double r10755 = r10753 + r10754;
        double r10756 = 1.781441610035736e+308;
        bool r10757 = r10750 <= r10756;
        double r10758 = expm1(r10743);
        double r10759 = r10734 / r10758;
        double r10760 = expm1(r10738);
        double r10761 = r10734 * r10736;
        double r10762 = expm1(r10761);
        double r10763 = r10760 / r10762;
        double r10764 = r10759 * r10763;
        double r10765 = r10757 ? r10764 : r10755;
        double r10766 = r10752 ? r10755 : r10765;
        return r10766;
}

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 r10767, r10768, r10769, r10770, r10771, r10772, r10773, r10774, r10775, r10776, r10777, r10778, r10779, r10780, r10781, r10782, r10783;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10767);
        mpfr_init(r10768);
        mpfr_init(r10769);
        mpfr_init(r10770);
        mpfr_init(r10771);
        mpfr_init(r10772);
        mpfr_init_set_str(r10773, "1", 10, MPFR_RNDN);
        mpfr_init(r10774);
        mpfr_init(r10775);
        mpfr_init(r10776);
        mpfr_init(r10777);
        mpfr_init(r10778);
        mpfr_init(r10779);
        mpfr_init(r10780);
        mpfr_init(r10781);
        mpfr_init(r10782);
        mpfr_init(r10783);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r10767, eps, MPFR_RNDN);
        mpfr_set_d(r10768, a, MPFR_RNDN);
        mpfr_set_d(r10769, b, MPFR_RNDN);
        mpfr_add(r10770, r10768, r10769, MPFR_RNDN);
        mpfr_mul(r10771, r10770, r10767, MPFR_RNDN);
        mpfr_exp(r10772, r10771, MPFR_RNDN);
        ;
        mpfr_sub(r10774, r10772, r10773, MPFR_RNDN);
        mpfr_mul(r10775, r10767, r10774, MPFR_RNDN);
        mpfr_mul(r10776, r10768, r10767, MPFR_RNDN);
        mpfr_exp(r10777, r10776, MPFR_RNDN);
        mpfr_sub(r10778, r10777, r10773, MPFR_RNDN);
        mpfr_mul(r10779, r10769, r10767, MPFR_RNDN);
        mpfr_exp(r10780, r10779, MPFR_RNDN);
        mpfr_sub(r10781, r10780, r10773, MPFR_RNDN);
        mpfr_mul(r10782, r10778, r10781, MPFR_RNDN);
        mpfr_div(r10783, r10775, r10782, MPFR_RNDN);
        return mpfr_get_d(r10783, MPFR_RNDN);
}

static mpfr_t r10784, r10785, r10786, r10787, r10788, r10789, r10790, r10791, r10792, r10793, r10794, r10795, r10796, r10797, r10798, r10799, r10800, r10801, r10802, r10803, r10804, r10805, r10806, r10807, r10808, r10809, r10810, r10811, r10812, r10813, r10814, r10815, r10816;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10784);
        mpfr_init(r10785);
        mpfr_init(r10786);
        mpfr_init(r10787);
        mpfr_init(r10788);
        mpfr_init(r10789);
        mpfr_init_set_str(r10790, "1", 10, MPFR_RNDN);
        mpfr_init(r10791);
        mpfr_init(r10792);
        mpfr_init(r10793);
        mpfr_init(r10794);
        mpfr_init(r10795);
        mpfr_init(r10796);
        mpfr_init(r10797);
        mpfr_init(r10798);
        mpfr_init(r10799);
        mpfr_init(r10800);
        mpfr_init_set_str(r10801, "-6.137427270817618e-20", 10, MPFR_RNDN);
        mpfr_init(r10802);
        mpfr_init(r10803);
        mpfr_init(r10804);
        mpfr_init(r10805);
        mpfr_init_set_str(r10806, "1.781441610035736e+308", 10, MPFR_RNDN);
        mpfr_init(r10807);
        mpfr_init(r10808);
        mpfr_init(r10809);
        mpfr_init(r10810);
        mpfr_init(r10811);
        mpfr_init(r10812);
        mpfr_init(r10813);
        mpfr_init(r10814);
        mpfr_init(r10815);
        mpfr_init(r10816);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r10784, eps, MPFR_RNDN);
        mpfr_set_d(r10785, a, MPFR_RNDN);
        mpfr_set_d(r10786, b, MPFR_RNDN);
        mpfr_add(r10787, r10785, r10786, MPFR_RNDN);
        mpfr_mul(r10788, r10787, r10784, MPFR_RNDN);
        mpfr_exp(r10789, r10788, MPFR_RNDN);
        ;
        mpfr_sub(r10791, r10789, r10790, MPFR_RNDN);
        mpfr_mul(r10792, r10784, r10791, MPFR_RNDN);
        mpfr_mul(r10793, r10785, r10784, MPFR_RNDN);
        mpfr_exp(r10794, r10793, MPFR_RNDN);
        mpfr_sub(r10795, r10794, r10790, MPFR_RNDN);
        mpfr_mul(r10796, r10786, r10784, MPFR_RNDN);
        mpfr_exp(r10797, r10796, MPFR_RNDN);
        mpfr_sub(r10798, r10797, r10790, MPFR_RNDN);
        mpfr_mul(r10799, r10795, r10798, MPFR_RNDN);
        mpfr_div(r10800, r10792, r10799, MPFR_RNDN);
        ;
        mpfr_set_si(r10802, mpfr_cmp(r10800, r10801) <= 0, MPFR_RNDN);
        mpfr_div(r10803, r10790, r10786, MPFR_RNDN);
        mpfr_div(r10804, r10790, r10785, MPFR_RNDN);
        mpfr_add(r10805, r10803, r10804, MPFR_RNDN);
        ;
        mpfr_set_si(r10807, mpfr_cmp(r10800, r10806) <= 0, MPFR_RNDN);
        mpfr_expm1(r10808, r10793, MPFR_RNDN);
        mpfr_div(r10809, r10784, r10808, MPFR_RNDN);
        mpfr_expm1(r10810, r10788, MPFR_RNDN);
        mpfr_mul(r10811, r10784, r10786, MPFR_RNDN);
        mpfr_expm1(r10812, r10811, MPFR_RNDN);
        mpfr_div(r10813, r10810, r10812, MPFR_RNDN);
        mpfr_mul(r10814, r10809, r10813, MPFR_RNDN);
        if (mpfr_get_si(r10807, MPFR_RNDN)) { mpfr_set(r10815, r10814, MPFR_RNDN); } else { mpfr_set(r10815, r10805, MPFR_RNDN); };
        if (mpfr_get_si(r10802, MPFR_RNDN)) { mpfr_set(r10816, r10805, MPFR_RNDN); } else { mpfr_set(r10816, r10815, MPFR_RNDN); };
        return mpfr_get_d(r10816, MPFR_RNDN);
}

static mpfr_t r10817, r10818, r10819, r10820, r10821, r10822, r10823, r10824, r10825, r10826, r10827, r10828, r10829, r10830, r10831, r10832, r10833, r10834, r10835, r10836, r10837, r10838, r10839, r10840, r10841, r10842, r10843, r10844, r10845, r10846, r10847, r10848, r10849;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10817);
        mpfr_init(r10818);
        mpfr_init(r10819);
        mpfr_init(r10820);
        mpfr_init(r10821);
        mpfr_init(r10822);
        mpfr_init_set_str(r10823, "1", 10, MPFR_RNDN);
        mpfr_init(r10824);
        mpfr_init(r10825);
        mpfr_init(r10826);
        mpfr_init(r10827);
        mpfr_init(r10828);
        mpfr_init(r10829);
        mpfr_init(r10830);
        mpfr_init(r10831);
        mpfr_init(r10832);
        mpfr_init(r10833);
        mpfr_init_set_str(r10834, "-6.137427270817618e-20", 10, MPFR_RNDN);
        mpfr_init(r10835);
        mpfr_init(r10836);
        mpfr_init(r10837);
        mpfr_init(r10838);
        mpfr_init_set_str(r10839, "1.781441610035736e+308", 10, MPFR_RNDN);
        mpfr_init(r10840);
        mpfr_init(r10841);
        mpfr_init(r10842);
        mpfr_init(r10843);
        mpfr_init(r10844);
        mpfr_init(r10845);
        mpfr_init(r10846);
        mpfr_init(r10847);
        mpfr_init(r10848);
        mpfr_init(r10849);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r10817, eps, MPFR_RNDN);
        mpfr_set_d(r10818, a, MPFR_RNDN);
        mpfr_set_d(r10819, b, MPFR_RNDN);
        mpfr_add(r10820, r10818, r10819, MPFR_RNDN);
        mpfr_mul(r10821, r10820, r10817, MPFR_RNDN);
        mpfr_exp(r10822, r10821, MPFR_RNDN);
        ;
        mpfr_sub(r10824, r10822, r10823, MPFR_RNDN);
        mpfr_mul(r10825, r10817, r10824, MPFR_RNDN);
        mpfr_mul(r10826, r10818, r10817, MPFR_RNDN);
        mpfr_exp(r10827, r10826, MPFR_RNDN);
        mpfr_sub(r10828, r10827, r10823, MPFR_RNDN);
        mpfr_mul(r10829, r10819, r10817, MPFR_RNDN);
        mpfr_exp(r10830, r10829, MPFR_RNDN);
        mpfr_sub(r10831, r10830, r10823, MPFR_RNDN);
        mpfr_mul(r10832, r10828, r10831, MPFR_RNDN);
        mpfr_div(r10833, r10825, r10832, MPFR_RNDN);
        ;
        mpfr_set_si(r10835, mpfr_cmp(r10833, r10834) <= 0, MPFR_RNDN);
        mpfr_div(r10836, r10823, r10819, MPFR_RNDN);
        mpfr_div(r10837, r10823, r10818, MPFR_RNDN);
        mpfr_add(r10838, r10836, r10837, MPFR_RNDN);
        ;
        mpfr_set_si(r10840, mpfr_cmp(r10833, r10839) <= 0, MPFR_RNDN);
        mpfr_expm1(r10841, r10826, MPFR_RNDN);
        mpfr_div(r10842, r10817, r10841, MPFR_RNDN);
        mpfr_expm1(r10843, r10821, MPFR_RNDN);
        mpfr_mul(r10844, r10817, r10819, MPFR_RNDN);
        mpfr_expm1(r10845, r10844, MPFR_RNDN);
        mpfr_div(r10846, r10843, r10845, MPFR_RNDN);
        mpfr_mul(r10847, r10842, r10846, MPFR_RNDN);
        if (mpfr_get_si(r10840, MPFR_RNDN)) { mpfr_set(r10848, r10847, MPFR_RNDN); } else { mpfr_set(r10848, r10838, MPFR_RNDN); };
        if (mpfr_get_si(r10835, MPFR_RNDN)) { mpfr_set(r10849, r10838, MPFR_RNDN); } else { mpfr_set(r10849, r10848, MPFR_RNDN); };
        return mpfr_get_d(r10849, MPFR_RNDN);
}

