#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 r58747 = x;
        float r58748 = eps;
        float r58749 = r58747 + r58748;
        float r58750 = tan(r58749);
        float r58751 = tan(r58747);
        float r58752 = r58750 - r58751;
        return r58752;
}

double f_id(double x, double eps) {
        double r58753 = x;
        double r58754 = eps;
        double r58755 = r58753 + r58754;
        double r58756 = tan(r58755);
        double r58757 = tan(r58753);
        double r58758 = r58756 - r58757;
        return r58758;
}


double f_of(float x, float eps) {
        float r58759 = eps;
        float r58760 = -5.820154306538017e-17;
        bool r58761 = r58759 <= r58760;
        float r58762 = x;
        float r58763 = tan(r58762);
        float r58764 = tan(r58759);
        float r58765 = r58763 + r58764;
        float r58766 = 1;
        float r58767 = r58764 * r58763;
        float r58768 = 3;
        float r58769 = pow(r58767, r58768);
        float r58770 = cbrt(r58769);
        float r58771 = r58766 - r58770;
        float r58772 = r58765 / r58771;
        float r58773 = r58772 - r58763;
        float r58774 = 1.9089152008804126e-17;
        bool r58775 = r58759 <= r58774;
        float r58776 = pow(r58759, r58768);
        float r58777 = 2;
        float r58778 = pow(r58762, r58777);
        float r58779 = r58776 * r58778;
        float r58780 = pow(r58759, r58777);
        float r58781 = r58780 * r58762;
        float r58782 = r58779 + r58781;
        float r58783 = r58759 + r58782;
        float r58784 = r58775 ? r58783 : r58773;
        float r58785 = r58761 ? r58773 : r58784;
        return r58785;
}

double f_od(double x, double eps) {
        double r58786 = eps;
        double r58787 = -5.820154306538017e-17;
        bool r58788 = r58786 <= r58787;
        double r58789 = x;
        double r58790 = tan(r58789);
        double r58791 = tan(r58786);
        double r58792 = r58790 + r58791;
        double r58793 = 1;
        double r58794 = r58791 * r58790;
        double r58795 = 3;
        double r58796 = pow(r58794, r58795);
        double r58797 = cbrt(r58796);
        double r58798 = r58793 - r58797;
        double r58799 = r58792 / r58798;
        double r58800 = r58799 - r58790;
        double r58801 = 1.9089152008804126e-17;
        bool r58802 = r58786 <= r58801;
        double r58803 = pow(r58786, r58795);
        double r58804 = 2;
        double r58805 = pow(r58789, r58804);
        double r58806 = r58803 * r58805;
        double r58807 = pow(r58786, r58804);
        double r58808 = r58807 * r58789;
        double r58809 = r58806 + r58808;
        double r58810 = r58786 + r58809;
        double r58811 = r58802 ? r58810 : r58800;
        double r58812 = r58788 ? r58800 : r58811;
        return r58812;
}

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 r58813, r58814, r58815, r58816, r58817, r58818;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58813);
        mpfr_init(r58814);
        mpfr_init(r58815);
        mpfr_init(r58816);
        mpfr_init(r58817);
        mpfr_init(r58818);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58813, x, MPFR_RNDN);
        mpfr_set_d(r58814, eps, MPFR_RNDN);
        mpfr_add(r58815, r58813, r58814, MPFR_RNDN);
        mpfr_tan(r58816, r58815, MPFR_RNDN);
        mpfr_tan(r58817, r58813, MPFR_RNDN);
        mpfr_sub(r58818, r58816, r58817, MPFR_RNDN);
        return mpfr_get_d(r58818, MPFR_RNDN);
}

static mpfr_t r58819, r58820, r58821, r58822, r58823, r58824, r58825, r58826, r58827, r58828, r58829, r58830, r58831, r58832, r58833, r58834, r58835, r58836, r58837, r58838, r58839, r58840, r58841, r58842, r58843, r58844, r58845;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58819);
        mpfr_init_set_str(r58820, "-5.820154306538017e-17", 10, MPFR_RNDN);
        mpfr_init(r58821);
        mpfr_init(r58822);
        mpfr_init(r58823);
        mpfr_init(r58824);
        mpfr_init(r58825);
        mpfr_init_set_str(r58826, "1", 10, MPFR_RNDN);
        mpfr_init(r58827);
        mpfr_init_set_str(r58828, "3", 10, MPFR_RNDN);
        mpfr_init(r58829);
        mpfr_init(r58830);
        mpfr_init(r58831);
        mpfr_init(r58832);
        mpfr_init(r58833);
        mpfr_init_set_str(r58834, "1.9089152008804126e-17", 10, MPFR_RNDN);
        mpfr_init(r58835);
        mpfr_init(r58836);
        mpfr_init_set_str(r58837, "2", 10, MPFR_RNDN);
        mpfr_init(r58838);
        mpfr_init(r58839);
        mpfr_init(r58840);
        mpfr_init(r58841);
        mpfr_init(r58842);
        mpfr_init(r58843);
        mpfr_init(r58844);
        mpfr_init(r58845);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58819, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58821, mpfr_cmp(r58819, r58820) <= 0, MPFR_RNDN);
        mpfr_set_d(r58822, x, MPFR_RNDN);
        mpfr_tan(r58823, r58822, MPFR_RNDN);
        mpfr_tan(r58824, r58819, MPFR_RNDN);
        mpfr_add(r58825, r58823, r58824, MPFR_RNDN);
        ;
        mpfr_mul(r58827, r58824, r58823, MPFR_RNDN);
        ;
        mpfr_pow(r58829, r58827, r58828, MPFR_RNDN);
        mpfr_cbrt(r58830, r58829, MPFR_RNDN);
        mpfr_sub(r58831, r58826, r58830, MPFR_RNDN);
        mpfr_div(r58832, r58825, r58831, MPFR_RNDN);
        mpfr_sub(r58833, r58832, r58823, MPFR_RNDN);
        ;
        mpfr_set_si(r58835, mpfr_cmp(r58819, r58834) <= 0, MPFR_RNDN);
        mpfr_pow(r58836, r58819, r58828, MPFR_RNDN);
        ;
        mpfr_pow(r58838, r58822, r58837, MPFR_RNDN);
        mpfr_mul(r58839, r58836, r58838, MPFR_RNDN);
        mpfr_pow(r58840, r58819, r58837, MPFR_RNDN);
        mpfr_mul(r58841, r58840, r58822, MPFR_RNDN);
        mpfr_add(r58842, r58839, r58841, MPFR_RNDN);
        mpfr_add(r58843, r58819, r58842, MPFR_RNDN);
        if (mpfr_get_si(r58835, MPFR_RNDN)) { mpfr_set(r58844, r58843, MPFR_RNDN); } else { mpfr_set(r58844, r58833, MPFR_RNDN); };
        if (mpfr_get_si(r58821, MPFR_RNDN)) { mpfr_set(r58845, r58833, MPFR_RNDN); } else { mpfr_set(r58845, r58844, MPFR_RNDN); };
        return mpfr_get_d(r58845, MPFR_RNDN);
}

static mpfr_t r58846, r58847, r58848, r58849, r58850, r58851, r58852, r58853, r58854, r58855, r58856, r58857, r58858, r58859, r58860, r58861, r58862, r58863, r58864, r58865, r58866, r58867, r58868, r58869, r58870, r58871, r58872;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58846);
        mpfr_init_set_str(r58847, "-5.820154306538017e-17", 10, MPFR_RNDN);
        mpfr_init(r58848);
        mpfr_init(r58849);
        mpfr_init(r58850);
        mpfr_init(r58851);
        mpfr_init(r58852);
        mpfr_init_set_str(r58853, "1", 10, MPFR_RNDN);
        mpfr_init(r58854);
        mpfr_init_set_str(r58855, "3", 10, MPFR_RNDN);
        mpfr_init(r58856);
        mpfr_init(r58857);
        mpfr_init(r58858);
        mpfr_init(r58859);
        mpfr_init(r58860);
        mpfr_init_set_str(r58861, "1.9089152008804126e-17", 10, MPFR_RNDN);
        mpfr_init(r58862);
        mpfr_init(r58863);
        mpfr_init_set_str(r58864, "2", 10, MPFR_RNDN);
        mpfr_init(r58865);
        mpfr_init(r58866);
        mpfr_init(r58867);
        mpfr_init(r58868);
        mpfr_init(r58869);
        mpfr_init(r58870);
        mpfr_init(r58871);
        mpfr_init(r58872);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r58846, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58848, mpfr_cmp(r58846, r58847) <= 0, MPFR_RNDN);
        mpfr_set_d(r58849, x, MPFR_RNDN);
        mpfr_tan(r58850, r58849, MPFR_RNDN);
        mpfr_tan(r58851, r58846, MPFR_RNDN);
        mpfr_add(r58852, r58850, r58851, MPFR_RNDN);
        ;
        mpfr_mul(r58854, r58851, r58850, MPFR_RNDN);
        ;
        mpfr_pow(r58856, r58854, r58855, MPFR_RNDN);
        mpfr_cbrt(r58857, r58856, MPFR_RNDN);
        mpfr_sub(r58858, r58853, r58857, MPFR_RNDN);
        mpfr_div(r58859, r58852, r58858, MPFR_RNDN);
        mpfr_sub(r58860, r58859, r58850, MPFR_RNDN);
        ;
        mpfr_set_si(r58862, mpfr_cmp(r58846, r58861) <= 0, MPFR_RNDN);
        mpfr_pow(r58863, r58846, r58855, MPFR_RNDN);
        ;
        mpfr_pow(r58865, r58849, r58864, MPFR_RNDN);
        mpfr_mul(r58866, r58863, r58865, MPFR_RNDN);
        mpfr_pow(r58867, r58846, r58864, MPFR_RNDN);
        mpfr_mul(r58868, r58867, r58849, MPFR_RNDN);
        mpfr_add(r58869, r58866, r58868, MPFR_RNDN);
        mpfr_add(r58870, r58846, r58869, MPFR_RNDN);
        if (mpfr_get_si(r58862, MPFR_RNDN)) { mpfr_set(r58871, r58870, MPFR_RNDN); } else { mpfr_set(r58871, r58860, MPFR_RNDN); };
        if (mpfr_get_si(r58848, MPFR_RNDN)) { mpfr_set(r58872, r58860, MPFR_RNDN); } else { mpfr_set(r58872, r58871, MPFR_RNDN); };
        return mpfr_get_d(r58872, MPFR_RNDN);
}

