#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "2tan (problem 3.3.2)";

double f_if(float x, float eps) {
        float r10730 = x;
        float r10731 = eps;
        float r10732 = r10730 + r10731;
        float r10733 = tan(r10732);
        float r10734 = tan(r10730);
        float r10735 = r10733 - r10734;
        return r10735;
}

double f_id(double x, double eps) {
        double r10736 = x;
        double r10737 = eps;
        double r10738 = r10736 + r10737;
        double r10739 = tan(r10738);
        double r10740 = tan(r10736);
        double r10741 = r10739 - r10740;
        return r10741;
}


double f_of(float x, float eps) {
        float r10742 = eps;
        float r10743 = 2.0f;
        float r10744 = pow(r10742, r10743);
        float r10745 = x;
        float r10746 = r10744 * r10745;
        float r10747 = 3.0f;
        float r10748 = pow(r10742, r10747);
        float r10749 = pow(r10745, r10743);
        float r10750 = r10748 * r10749;
        float r10751 = r10742 + r10750;
        float r10752 = r10746 + r10751;
        float r10753 = -1.059607752271381e-24f;
        bool r10754 = r10752 <= r10753;
        float r10755 = tan(r10745);
        float r10756 = tan(r10742);
        float r10757 = sin(r10745);
        float r10758 = r10756 * r10757;
        float r10759 = r10755 * r10758;
        float r10760 = r10755 + r10756;
        float r10761 = cos(r10745);
        float r10762 = r10760 * r10761;
        float r10763 = r10762 - r10757;
        float r10764 = r10759 + r10763;
        float r10765 = r10756 * r10761;
        float r10766 = r10765 * r10755;
        float r10767 = r10761 - r10766;
        float r10768 = r10764 / r10767;
        float r10769 = 5.431768626105551e-126f;
        bool r10770 = r10752 <= r10769;
        float r10771 = r10770 ? r10752 : r10768;
        float r10772 = r10754 ? r10768 : r10771;
        return r10772;
}

double f_od(double x, double eps) {
        double r10773 = eps;
        double r10774 = 2.0;
        double r10775 = pow(r10773, r10774);
        double r10776 = x;
        double r10777 = r10775 * r10776;
        double r10778 = 3.0;
        double r10779 = pow(r10773, r10778);
        double r10780 = pow(r10776, r10774);
        double r10781 = r10779 * r10780;
        double r10782 = r10773 + r10781;
        double r10783 = r10777 + r10782;
        double r10784 = -1.059607752271381e-24;
        bool r10785 = r10783 <= r10784;
        double r10786 = tan(r10776);
        double r10787 = tan(r10773);
        double r10788 = sin(r10776);
        double r10789 = r10787 * r10788;
        double r10790 = r10786 * r10789;
        double r10791 = r10786 + r10787;
        double r10792 = cos(r10776);
        double r10793 = r10791 * r10792;
        double r10794 = r10793 - r10788;
        double r10795 = r10790 + r10794;
        double r10796 = r10787 * r10792;
        double r10797 = r10796 * r10786;
        double r10798 = r10792 - r10797;
        double r10799 = r10795 / r10798;
        double r10800 = 5.431768626105551e-126;
        bool r10801 = r10783 <= r10800;
        double r10802 = r10801 ? r10783 : r10799;
        double r10803 = r10785 ? r10799 : r10802;
        return r10803;
}

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 r10804, r10805, r10806, r10807, r10808, r10809;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10804);
        mpfr_init(r10805);
        mpfr_init(r10806);
        mpfr_init(r10807);
        mpfr_init(r10808);
        mpfr_init(r10809);
}

double f_im(double x, double eps) {
        mpfr_set_d(r10804, x, MPFR_RNDN);
        mpfr_set_d(r10805, eps, MPFR_RNDN);
        mpfr_add(r10806, r10804, r10805, MPFR_RNDN);
        mpfr_tan(r10807, r10806, MPFR_RNDN);
        mpfr_tan(r10808, r10804, MPFR_RNDN);
        mpfr_sub(r10809, r10807, r10808, MPFR_RNDN);
        return mpfr_get_d(r10809, MPFR_RNDN);
}

static mpfr_t r10810, r10811, r10812, r10813, r10814, r10815, r10816, r10817, r10818, r10819, r10820, r10821, r10822, r10823, r10824, r10825, r10826, r10827, r10828, r10829, r10830, r10831, r10832, r10833, r10834, r10835, r10836, r10837, r10838, r10839, r10840;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10810);
        mpfr_init_set_str(r10811, "2", 10, MPFR_RNDN);
        mpfr_init(r10812);
        mpfr_init(r10813);
        mpfr_init(r10814);
        mpfr_init_set_str(r10815, "3", 10, MPFR_RNDN);
        mpfr_init(r10816);
        mpfr_init(r10817);
        mpfr_init(r10818);
        mpfr_init(r10819);
        mpfr_init(r10820);
        mpfr_init_set_str(r10821, "-1.059607752271381e-24", 10, MPFR_RNDN);
        mpfr_init(r10822);
        mpfr_init(r10823);
        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(r10834);
        mpfr_init(r10835);
        mpfr_init(r10836);
        mpfr_init_set_str(r10837, "5.431768626105551e-126", 10, MPFR_RNDN);
        mpfr_init(r10838);
        mpfr_init(r10839);
        mpfr_init(r10840);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r10810, eps, MPFR_RNDN);
        ;
        mpfr_pow(r10812, r10810, r10811, MPFR_RNDN);
        mpfr_set_d(r10813, x, MPFR_RNDN);
        mpfr_mul(r10814, r10812, r10813, MPFR_RNDN);
        ;
        mpfr_pow(r10816, r10810, r10815, MPFR_RNDN);
        mpfr_pow(r10817, r10813, r10811, MPFR_RNDN);
        mpfr_mul(r10818, r10816, r10817, MPFR_RNDN);
        mpfr_add(r10819, r10810, r10818, MPFR_RNDN);
        mpfr_add(r10820, r10814, r10819, MPFR_RNDN);
        ;
        mpfr_set_si(r10822, mpfr_cmp(r10820, r10821) <= 0, MPFR_RNDN);
        mpfr_tan(r10823, r10813, MPFR_RNDN);
        mpfr_tan(r10824, r10810, MPFR_RNDN);
        mpfr_sin(r10825, r10813, MPFR_RNDN);
        mpfr_mul(r10826, r10824, r10825, MPFR_RNDN);
        mpfr_mul(r10827, r10823, r10826, MPFR_RNDN);
        mpfr_add(r10828, r10823, r10824, MPFR_RNDN);
        mpfr_cos(r10829, r10813, MPFR_RNDN);
        mpfr_mul(r10830, r10828, r10829, MPFR_RNDN);
        mpfr_sub(r10831, r10830, r10825, MPFR_RNDN);
        mpfr_add(r10832, r10827, r10831, MPFR_RNDN);
        mpfr_mul(r10833, r10824, r10829, MPFR_RNDN);
        mpfr_mul(r10834, r10833, r10823, MPFR_RNDN);
        mpfr_sub(r10835, r10829, r10834, MPFR_RNDN);
        mpfr_div(r10836, r10832, r10835, MPFR_RNDN);
        ;
        mpfr_set_si(r10838, mpfr_cmp(r10820, r10837) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r10838, MPFR_RNDN)) { mpfr_set(r10839, r10820, MPFR_RNDN); } else { mpfr_set(r10839, r10836, MPFR_RNDN); };
        if (mpfr_get_si(r10822, MPFR_RNDN)) { mpfr_set(r10840, r10836, MPFR_RNDN); } else { mpfr_set(r10840, r10839, MPFR_RNDN); };
        return mpfr_get_d(r10840, MPFR_RNDN);
}

static mpfr_t r10841, r10842, r10843, r10844, r10845, r10846, r10847, r10848, r10849, r10850, r10851, r10852, r10853, r10854, r10855, r10856, r10857, r10858, r10859, r10860, r10861, r10862, r10863, r10864, r10865, r10866, r10867, r10868, r10869, r10870, r10871;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10841);
        mpfr_init_set_str(r10842, "2", 10, MPFR_RNDN);
        mpfr_init(r10843);
        mpfr_init(r10844);
        mpfr_init(r10845);
        mpfr_init_set_str(r10846, "3", 10, MPFR_RNDN);
        mpfr_init(r10847);
        mpfr_init(r10848);
        mpfr_init(r10849);
        mpfr_init(r10850);
        mpfr_init(r10851);
        mpfr_init_set_str(r10852, "-1.059607752271381e-24", 10, MPFR_RNDN);
        mpfr_init(r10853);
        mpfr_init(r10854);
        mpfr_init(r10855);
        mpfr_init(r10856);
        mpfr_init(r10857);
        mpfr_init(r10858);
        mpfr_init(r10859);
        mpfr_init(r10860);
        mpfr_init(r10861);
        mpfr_init(r10862);
        mpfr_init(r10863);
        mpfr_init(r10864);
        mpfr_init(r10865);
        mpfr_init(r10866);
        mpfr_init(r10867);
        mpfr_init_set_str(r10868, "5.431768626105551e-126", 10, MPFR_RNDN);
        mpfr_init(r10869);
        mpfr_init(r10870);
        mpfr_init(r10871);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r10841, eps, MPFR_RNDN);
        ;
        mpfr_pow(r10843, r10841, r10842, MPFR_RNDN);
        mpfr_set_d(r10844, x, MPFR_RNDN);
        mpfr_mul(r10845, r10843, r10844, MPFR_RNDN);
        ;
        mpfr_pow(r10847, r10841, r10846, MPFR_RNDN);
        mpfr_pow(r10848, r10844, r10842, MPFR_RNDN);
        mpfr_mul(r10849, r10847, r10848, MPFR_RNDN);
        mpfr_add(r10850, r10841, r10849, MPFR_RNDN);
        mpfr_add(r10851, r10845, r10850, MPFR_RNDN);
        ;
        mpfr_set_si(r10853, mpfr_cmp(r10851, r10852) <= 0, MPFR_RNDN);
        mpfr_tan(r10854, r10844, MPFR_RNDN);
        mpfr_tan(r10855, r10841, MPFR_RNDN);
        mpfr_sin(r10856, r10844, MPFR_RNDN);
        mpfr_mul(r10857, r10855, r10856, MPFR_RNDN);
        mpfr_mul(r10858, r10854, r10857, MPFR_RNDN);
        mpfr_add(r10859, r10854, r10855, MPFR_RNDN);
        mpfr_cos(r10860, r10844, MPFR_RNDN);
        mpfr_mul(r10861, r10859, r10860, MPFR_RNDN);
        mpfr_sub(r10862, r10861, r10856, MPFR_RNDN);
        mpfr_add(r10863, r10858, r10862, MPFR_RNDN);
        mpfr_mul(r10864, r10855, r10860, MPFR_RNDN);
        mpfr_mul(r10865, r10864, r10854, MPFR_RNDN);
        mpfr_sub(r10866, r10860, r10865, MPFR_RNDN);
        mpfr_div(r10867, r10863, r10866, MPFR_RNDN);
        ;
        mpfr_set_si(r10869, mpfr_cmp(r10851, r10868) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r10869, MPFR_RNDN)) { mpfr_set(r10870, r10851, MPFR_RNDN); } else { mpfr_set(r10870, r10867, MPFR_RNDN); };
        if (mpfr_get_si(r10853, MPFR_RNDN)) { mpfr_set(r10871, r10867, MPFR_RNDN); } else { mpfr_set(r10871, r10870, MPFR_RNDN); };
        return mpfr_get_d(r10871, MPFR_RNDN);
}

