#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 r26710 = eps;
        float r26711 = a;
        float r26712 = b;
        float r26713 = r26711 + r26712;
        float r26714 = r26713 * r26710;
        float r26715 = exp(r26714);
        float r26716 = 1;
        float r26717 = r26715 - r26716;
        float r26718 = r26710 * r26717;
        float r26719 = r26711 * r26710;
        float r26720 = exp(r26719);
        float r26721 = r26720 - r26716;
        float r26722 = r26712 * r26710;
        float r26723 = exp(r26722);
        float r26724 = r26723 - r26716;
        float r26725 = r26721 * r26724;
        float r26726 = r26718 / r26725;
        return r26726;
}

double f_id(double a, double b, double eps) {
        double r26727 = eps;
        double r26728 = a;
        double r26729 = b;
        double r26730 = r26728 + r26729;
        double r26731 = r26730 * r26727;
        double r26732 = exp(r26731);
        double r26733 = 1;
        double r26734 = r26732 - r26733;
        double r26735 = r26727 * r26734;
        double r26736 = r26728 * r26727;
        double r26737 = exp(r26736);
        double r26738 = r26737 - r26733;
        double r26739 = r26729 * r26727;
        double r26740 = exp(r26739);
        double r26741 = r26740 - r26733;
        double r26742 = r26738 * r26741;
        double r26743 = r26735 / r26742;
        return r26743;
}


double f_of(float a, float b, float eps) {
        float r26744 = eps;
        float r26745 = a;
        float r26746 = b;
        float r26747 = r26745 + r26746;
        float r26748 = r26747 * r26744;
        float r26749 = exp(r26748);
        float r26750 = 1;
        float r26751 = r26749 - r26750;
        float r26752 = r26744 * r26751;
        float r26753 = r26745 * r26744;
        float r26754 = exp(r26753);
        float r26755 = r26754 - r26750;
        float r26756 = r26746 * r26744;
        float r26757 = exp(r26756);
        float r26758 = r26757 - r26750;
        float r26759 = r26755 * r26758;
        float r26760 = r26752 / r26759;
        float r26761 = -2.7852926185370486e-33;
        bool r26762 = r26760 <= r26761;
        float r26763 = r26750 / r26746;
        float r26764 = r26750 / r26745;
        float r26765 = r26763 + r26764;
        float r26766 = 8.786189338411621e+87;
        bool r26767 = r26760 <= r26766;
        float r26768 = exp(r26758);
        float r26769 = log(r26768);
        float r26770 = r26755 * r26769;
        float r26771 = r26752 / r26770;
        float r26772 = r26767 ? r26771 : r26765;
        float r26773 = r26762 ? r26765 : r26772;
        return r26773;
}

double f_od(double a, double b, double eps) {
        double r26774 = eps;
        double r26775 = a;
        double r26776 = b;
        double r26777 = r26775 + r26776;
        double r26778 = r26777 * r26774;
        double r26779 = exp(r26778);
        double r26780 = 1;
        double r26781 = r26779 - r26780;
        double r26782 = r26774 * r26781;
        double r26783 = r26775 * r26774;
        double r26784 = exp(r26783);
        double r26785 = r26784 - r26780;
        double r26786 = r26776 * r26774;
        double r26787 = exp(r26786);
        double r26788 = r26787 - r26780;
        double r26789 = r26785 * r26788;
        double r26790 = r26782 / r26789;
        double r26791 = -2.7852926185370486e-33;
        bool r26792 = r26790 <= r26791;
        double r26793 = r26780 / r26776;
        double r26794 = r26780 / r26775;
        double r26795 = r26793 + r26794;
        double r26796 = 8.786189338411621e+87;
        bool r26797 = r26790 <= r26796;
        double r26798 = exp(r26788);
        double r26799 = log(r26798);
        double r26800 = r26785 * r26799;
        double r26801 = r26782 / r26800;
        double r26802 = r26797 ? r26801 : r26795;
        double r26803 = r26792 ? r26795 : r26802;
        return r26803;
}

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 r26804, r26805, r26806, r26807, r26808, r26809, r26810, r26811, r26812, r26813, r26814, r26815, r26816, r26817, r26818, r26819, r26820;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26804);
        mpfr_init(r26805);
        mpfr_init(r26806);
        mpfr_init(r26807);
        mpfr_init(r26808);
        mpfr_init(r26809);
        mpfr_init_set_str(r26810, "1", 10, MPFR_RNDN);
        mpfr_init(r26811);
        mpfr_init(r26812);
        mpfr_init(r26813);
        mpfr_init(r26814);
        mpfr_init(r26815);
        mpfr_init(r26816);
        mpfr_init(r26817);
        mpfr_init(r26818);
        mpfr_init(r26819);
        mpfr_init(r26820);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r26804, eps, MPFR_RNDN);
        mpfr_set_d(r26805, a, MPFR_RNDN);
        mpfr_set_d(r26806, b, MPFR_RNDN);
        mpfr_add(r26807, r26805, r26806, MPFR_RNDN);
        mpfr_mul(r26808, r26807, r26804, MPFR_RNDN);
        mpfr_exp(r26809, r26808, MPFR_RNDN);
        ;
        mpfr_sub(r26811, r26809, r26810, MPFR_RNDN);
        mpfr_mul(r26812, r26804, r26811, MPFR_RNDN);
        mpfr_mul(r26813, r26805, r26804, MPFR_RNDN);
        mpfr_exp(r26814, r26813, MPFR_RNDN);
        mpfr_sub(r26815, r26814, r26810, MPFR_RNDN);
        mpfr_mul(r26816, r26806, r26804, MPFR_RNDN);
        mpfr_exp(r26817, r26816, MPFR_RNDN);
        mpfr_sub(r26818, r26817, r26810, MPFR_RNDN);
        mpfr_mul(r26819, r26815, r26818, MPFR_RNDN);
        mpfr_div(r26820, r26812, r26819, MPFR_RNDN);
        return mpfr_get_d(r26820, MPFR_RNDN);
}

static mpfr_t r26821, r26822, r26823, r26824, r26825, r26826, r26827, r26828, r26829, r26830, r26831, r26832, r26833, r26834, r26835, r26836, r26837, r26838, r26839, r26840, r26841, r26842, r26843, r26844, r26845, r26846, r26847, r26848, r26849, r26850;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26821);
        mpfr_init(r26822);
        mpfr_init(r26823);
        mpfr_init(r26824);
        mpfr_init(r26825);
        mpfr_init(r26826);
        mpfr_init_set_str(r26827, "1", 10, MPFR_RNDN);
        mpfr_init(r26828);
        mpfr_init(r26829);
        mpfr_init(r26830);
        mpfr_init(r26831);
        mpfr_init(r26832);
        mpfr_init(r26833);
        mpfr_init(r26834);
        mpfr_init(r26835);
        mpfr_init(r26836);
        mpfr_init(r26837);
        mpfr_init_set_str(r26838, "-2.7852926185370486e-33", 10, MPFR_RNDN);
        mpfr_init(r26839);
        mpfr_init(r26840);
        mpfr_init(r26841);
        mpfr_init(r26842);
        mpfr_init_set_str(r26843, "8.786189338411621e+87", 10, MPFR_RNDN);
        mpfr_init(r26844);
        mpfr_init(r26845);
        mpfr_init(r26846);
        mpfr_init(r26847);
        mpfr_init(r26848);
        mpfr_init(r26849);
        mpfr_init(r26850);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r26821, eps, MPFR_RNDN);
        mpfr_set_d(r26822, a, MPFR_RNDN);
        mpfr_set_d(r26823, b, MPFR_RNDN);
        mpfr_add(r26824, r26822, r26823, MPFR_RNDN);
        mpfr_mul(r26825, r26824, r26821, MPFR_RNDN);
        mpfr_exp(r26826, r26825, MPFR_RNDN);
        ;
        mpfr_sub(r26828, r26826, r26827, MPFR_RNDN);
        mpfr_mul(r26829, r26821, r26828, MPFR_RNDN);
        mpfr_mul(r26830, r26822, r26821, MPFR_RNDN);
        mpfr_exp(r26831, r26830, MPFR_RNDN);
        mpfr_sub(r26832, r26831, r26827, MPFR_RNDN);
        mpfr_mul(r26833, r26823, r26821, MPFR_RNDN);
        mpfr_exp(r26834, r26833, MPFR_RNDN);
        mpfr_sub(r26835, r26834, r26827, MPFR_RNDN);
        mpfr_mul(r26836, r26832, r26835, MPFR_RNDN);
        mpfr_div(r26837, r26829, r26836, MPFR_RNDN);
        ;
        mpfr_set_si(r26839, mpfr_cmp(r26837, r26838) <= 0, MPFR_RNDN);
        mpfr_div(r26840, r26827, r26823, MPFR_RNDN);
        mpfr_div(r26841, r26827, r26822, MPFR_RNDN);
        mpfr_add(r26842, r26840, r26841, MPFR_RNDN);
        ;
        mpfr_set_si(r26844, mpfr_cmp(r26837, r26843) <= 0, MPFR_RNDN);
        mpfr_exp(r26845, r26835, MPFR_RNDN);
        mpfr_log(r26846, r26845, MPFR_RNDN);
        mpfr_mul(r26847, r26832, r26846, MPFR_RNDN);
        mpfr_div(r26848, r26829, r26847, MPFR_RNDN);
        if (mpfr_get_si(r26844, MPFR_RNDN)) { mpfr_set(r26849, r26848, MPFR_RNDN); } else { mpfr_set(r26849, r26842, MPFR_RNDN); };
        if (mpfr_get_si(r26839, MPFR_RNDN)) { mpfr_set(r26850, r26842, MPFR_RNDN); } else { mpfr_set(r26850, r26849, MPFR_RNDN); };
        return mpfr_get_d(r26850, MPFR_RNDN);
}

static mpfr_t r26851, r26852, r26853, r26854, r26855, r26856, r26857, r26858, r26859, r26860, r26861, r26862, r26863, r26864, r26865, r26866, r26867, r26868, r26869, r26870, r26871, r26872, r26873, r26874, r26875, r26876, r26877, r26878, r26879, r26880;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26851);
        mpfr_init(r26852);
        mpfr_init(r26853);
        mpfr_init(r26854);
        mpfr_init(r26855);
        mpfr_init(r26856);
        mpfr_init_set_str(r26857, "1", 10, MPFR_RNDN);
        mpfr_init(r26858);
        mpfr_init(r26859);
        mpfr_init(r26860);
        mpfr_init(r26861);
        mpfr_init(r26862);
        mpfr_init(r26863);
        mpfr_init(r26864);
        mpfr_init(r26865);
        mpfr_init(r26866);
        mpfr_init(r26867);
        mpfr_init_set_str(r26868, "-2.7852926185370486e-33", 10, MPFR_RNDN);
        mpfr_init(r26869);
        mpfr_init(r26870);
        mpfr_init(r26871);
        mpfr_init(r26872);
        mpfr_init_set_str(r26873, "8.786189338411621e+87", 10, MPFR_RNDN);
        mpfr_init(r26874);
        mpfr_init(r26875);
        mpfr_init(r26876);
        mpfr_init(r26877);
        mpfr_init(r26878);
        mpfr_init(r26879);
        mpfr_init(r26880);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r26851, eps, MPFR_RNDN);
        mpfr_set_d(r26852, a, MPFR_RNDN);
        mpfr_set_d(r26853, b, MPFR_RNDN);
        mpfr_add(r26854, r26852, r26853, MPFR_RNDN);
        mpfr_mul(r26855, r26854, r26851, MPFR_RNDN);
        mpfr_exp(r26856, r26855, MPFR_RNDN);
        ;
        mpfr_sub(r26858, r26856, r26857, MPFR_RNDN);
        mpfr_mul(r26859, r26851, r26858, MPFR_RNDN);
        mpfr_mul(r26860, r26852, r26851, MPFR_RNDN);
        mpfr_exp(r26861, r26860, MPFR_RNDN);
        mpfr_sub(r26862, r26861, r26857, MPFR_RNDN);
        mpfr_mul(r26863, r26853, r26851, MPFR_RNDN);
        mpfr_exp(r26864, r26863, MPFR_RNDN);
        mpfr_sub(r26865, r26864, r26857, MPFR_RNDN);
        mpfr_mul(r26866, r26862, r26865, MPFR_RNDN);
        mpfr_div(r26867, r26859, r26866, MPFR_RNDN);
        ;
        mpfr_set_si(r26869, mpfr_cmp(r26867, r26868) <= 0, MPFR_RNDN);
        mpfr_div(r26870, r26857, r26853, MPFR_RNDN);
        mpfr_div(r26871, r26857, r26852, MPFR_RNDN);
        mpfr_add(r26872, r26870, r26871, MPFR_RNDN);
        ;
        mpfr_set_si(r26874, mpfr_cmp(r26867, r26873) <= 0, MPFR_RNDN);
        mpfr_exp(r26875, r26865, MPFR_RNDN);
        mpfr_log(r26876, r26875, MPFR_RNDN);
        mpfr_mul(r26877, r26862, r26876, MPFR_RNDN);
        mpfr_div(r26878, r26859, r26877, MPFR_RNDN);
        if (mpfr_get_si(r26874, MPFR_RNDN)) { mpfr_set(r26879, r26878, MPFR_RNDN); } else { mpfr_set(r26879, r26872, MPFR_RNDN); };
        if (mpfr_get_si(r26869, MPFR_RNDN)) { mpfr_set(r26880, r26872, MPFR_RNDN); } else { mpfr_set(r26880, r26879, MPFR_RNDN); };
        return mpfr_get_d(r26880, MPFR_RNDN);
}

