#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 r58865 = x;
        float r58866 = eps;
        float r58867 = r58865 + r58866;
        float r58868 = tan(r58867);
        float r58869 = tan(r58865);
        float r58870 = r58868 - r58869;
        return r58870;
}

double f_id(double x, double eps) {
        double r58871 = x;
        double r58872 = eps;
        double r58873 = r58871 + r58872;
        double r58874 = tan(r58873);
        double r58875 = tan(r58871);
        double r58876 = r58874 - r58875;
        return r58876;
}


double f_of(float x, float eps) {
        float r58877 = eps;
        float r58878 = -4.937900603750566e-17;
        bool r58879 = r58877 <= r58878;
        float r58880 = x;
        float r58881 = tan(r58880);
        float r58882 = tan(r58877);
        float r58883 = r58881 + r58882;
        float r58884 = 1;
        float r58885 = r58881 * r58882;
        float r58886 = r58884 - r58885;
        float r58887 = r58883 / r58886;
        float r58888 = r58887 * r58887;
        float r58889 = r58881 * r58881;
        float r58890 = r58888 - r58889;
        float r58891 = r58887 + r58881;
        float r58892 = r58890 / r58891;
        float r58893 = 2.74084816432034e-15;
        bool r58894 = r58877 <= r58893;
        float r58895 = 3;
        float r58896 = pow(r58877, r58895);
        float r58897 = 2;
        float r58898 = pow(r58880, r58897);
        float r58899 = r58896 * r58898;
        float r58900 = pow(r58877, r58897);
        float r58901 = r58900 * r58880;
        float r58902 = r58899 + r58901;
        float r58903 = r58877 + r58902;
        float r58904 = cos(r58880);
        float r58905 = r58883 * r58904;
        float r58906 = sin(r58880);
        float r58907 = r58886 * r58906;
        float r58908 = r58905 - r58907;
        float r58909 = r58886 * r58904;
        float r58910 = r58908 / r58909;
        float r58911 = r58894 ? r58903 : r58910;
        float r58912 = r58879 ? r58892 : r58911;
        return r58912;
}

double f_od(double x, double eps) {
        double r58913 = eps;
        double r58914 = -4.937900603750566e-17;
        bool r58915 = r58913 <= r58914;
        double r58916 = x;
        double r58917 = tan(r58916);
        double r58918 = tan(r58913);
        double r58919 = r58917 + r58918;
        double r58920 = 1;
        double r58921 = r58917 * r58918;
        double r58922 = r58920 - r58921;
        double r58923 = r58919 / r58922;
        double r58924 = r58923 * r58923;
        double r58925 = r58917 * r58917;
        double r58926 = r58924 - r58925;
        double r58927 = r58923 + r58917;
        double r58928 = r58926 / r58927;
        double r58929 = 2.74084816432034e-15;
        bool r58930 = r58913 <= r58929;
        double r58931 = 3;
        double r58932 = pow(r58913, r58931);
        double r58933 = 2;
        double r58934 = pow(r58916, r58933);
        double r58935 = r58932 * r58934;
        double r58936 = pow(r58913, r58933);
        double r58937 = r58936 * r58916;
        double r58938 = r58935 + r58937;
        double r58939 = r58913 + r58938;
        double r58940 = cos(r58916);
        double r58941 = r58919 * r58940;
        double r58942 = sin(r58916);
        double r58943 = r58922 * r58942;
        double r58944 = r58941 - r58943;
        double r58945 = r58922 * r58940;
        double r58946 = r58944 / r58945;
        double r58947 = r58930 ? r58939 : r58946;
        double r58948 = r58915 ? r58928 : r58947;
        return r58948;
}

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 r58949, r58950, r58951, r58952, r58953, r58954;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58949);
        mpfr_init(r58950);
        mpfr_init(r58951);
        mpfr_init(r58952);
        mpfr_init(r58953);
        mpfr_init(r58954);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58949, x, MPFR_RNDN);
        mpfr_set_d(r58950, eps, MPFR_RNDN);
        mpfr_add(r58951, r58949, r58950, MPFR_RNDN);
        mpfr_tan(r58952, r58951, MPFR_RNDN);
        mpfr_tan(r58953, r58949, MPFR_RNDN);
        mpfr_sub(r58954, r58952, r58953, MPFR_RNDN);
        return mpfr_get_d(r58954, MPFR_RNDN);
}

static mpfr_t r58955, r58956, r58957, r58958, r58959, r58960, r58961, r58962, r58963, r58964, r58965, r58966, r58967, r58968, r58969, r58970, r58971, r58972, r58973, r58974, r58975, r58976, r58977, r58978, r58979, r58980, r58981, r58982, r58983, r58984, r58985, r58986, r58987, r58988, r58989, r58990;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58955);
        mpfr_init_set_str(r58956, "-4.937900603750566e-17", 10, MPFR_RNDN);
        mpfr_init(r58957);
        mpfr_init(r58958);
        mpfr_init(r58959);
        mpfr_init(r58960);
        mpfr_init(r58961);
        mpfr_init_set_str(r58962, "1", 10, MPFR_RNDN);
        mpfr_init(r58963);
        mpfr_init(r58964);
        mpfr_init(r58965);
        mpfr_init(r58966);
        mpfr_init(r58967);
        mpfr_init(r58968);
        mpfr_init(r58969);
        mpfr_init(r58970);
        mpfr_init_set_str(r58971, "2.74084816432034e-15", 10, MPFR_RNDN);
        mpfr_init(r58972);
        mpfr_init_set_str(r58973, "3", 10, MPFR_RNDN);
        mpfr_init(r58974);
        mpfr_init_set_str(r58975, "2", 10, MPFR_RNDN);
        mpfr_init(r58976);
        mpfr_init(r58977);
        mpfr_init(r58978);
        mpfr_init(r58979);
        mpfr_init(r58980);
        mpfr_init(r58981);
        mpfr_init(r58982);
        mpfr_init(r58983);
        mpfr_init(r58984);
        mpfr_init(r58985);
        mpfr_init(r58986);
        mpfr_init(r58987);
        mpfr_init(r58988);
        mpfr_init(r58989);
        mpfr_init(r58990);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58955, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58957, mpfr_cmp(r58955, r58956) <= 0, MPFR_RNDN);
        mpfr_set_d(r58958, x, MPFR_RNDN);
        mpfr_tan(r58959, r58958, MPFR_RNDN);
        mpfr_tan(r58960, r58955, MPFR_RNDN);
        mpfr_add(r58961, r58959, r58960, MPFR_RNDN);
        ;
        mpfr_mul(r58963, r58959, r58960, MPFR_RNDN);
        mpfr_sub(r58964, r58962, r58963, MPFR_RNDN);
        mpfr_div(r58965, r58961, r58964, MPFR_RNDN);
        mpfr_mul(r58966, r58965, r58965, MPFR_RNDN);
        mpfr_mul(r58967, r58959, r58959, MPFR_RNDN);
        mpfr_sub(r58968, r58966, r58967, MPFR_RNDN);
        mpfr_add(r58969, r58965, r58959, MPFR_RNDN);
        mpfr_div(r58970, r58968, r58969, MPFR_RNDN);
        ;
        mpfr_set_si(r58972, mpfr_cmp(r58955, r58971) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r58974, r58955, r58973, MPFR_RNDN);
        ;
        mpfr_pow(r58976, r58958, r58975, MPFR_RNDN);
        mpfr_mul(r58977, r58974, r58976, MPFR_RNDN);
        mpfr_pow(r58978, r58955, r58975, MPFR_RNDN);
        mpfr_mul(r58979, r58978, r58958, MPFR_RNDN);
        mpfr_add(r58980, r58977, r58979, MPFR_RNDN);
        mpfr_add(r58981, r58955, r58980, MPFR_RNDN);
        mpfr_cos(r58982, r58958, MPFR_RNDN);
        mpfr_mul(r58983, r58961, r58982, MPFR_RNDN);
        mpfr_sin(r58984, r58958, MPFR_RNDN);
        mpfr_mul(r58985, r58964, r58984, MPFR_RNDN);
        mpfr_sub(r58986, r58983, r58985, MPFR_RNDN);
        mpfr_mul(r58987, r58964, r58982, MPFR_RNDN);
        mpfr_div(r58988, r58986, r58987, MPFR_RNDN);
        if (mpfr_get_si(r58972, MPFR_RNDN)) { mpfr_set(r58989, r58981, MPFR_RNDN); } else { mpfr_set(r58989, r58988, MPFR_RNDN); };
        if (mpfr_get_si(r58957, MPFR_RNDN)) { mpfr_set(r58990, r58970, MPFR_RNDN); } else { mpfr_set(r58990, r58989, MPFR_RNDN); };
        return mpfr_get_d(r58990, MPFR_RNDN);
}

static mpfr_t r58991, r58992, r58993, r58994, r58995, r58996, r58997, r58998, r58999, r59000, r59001, r59002, r59003, r59004, r59005, r59006, r59007, r59008, r59009, r59010, r59011, r59012, r59013, r59014, r59015, r59016, r59017, r59018, r59019, r59020, r59021, r59022, r59023, r59024, r59025, r59026;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58991);
        mpfr_init_set_str(r58992, "-4.937900603750566e-17", 10, MPFR_RNDN);
        mpfr_init(r58993);
        mpfr_init(r58994);
        mpfr_init(r58995);
        mpfr_init(r58996);
        mpfr_init(r58997);
        mpfr_init_set_str(r58998, "1", 10, MPFR_RNDN);
        mpfr_init(r58999);
        mpfr_init(r59000);
        mpfr_init(r59001);
        mpfr_init(r59002);
        mpfr_init(r59003);
        mpfr_init(r59004);
        mpfr_init(r59005);
        mpfr_init(r59006);
        mpfr_init_set_str(r59007, "2.74084816432034e-15", 10, MPFR_RNDN);
        mpfr_init(r59008);
        mpfr_init_set_str(r59009, "3", 10, MPFR_RNDN);
        mpfr_init(r59010);
        mpfr_init_set_str(r59011, "2", 10, MPFR_RNDN);
        mpfr_init(r59012);
        mpfr_init(r59013);
        mpfr_init(r59014);
        mpfr_init(r59015);
        mpfr_init(r59016);
        mpfr_init(r59017);
        mpfr_init(r59018);
        mpfr_init(r59019);
        mpfr_init(r59020);
        mpfr_init(r59021);
        mpfr_init(r59022);
        mpfr_init(r59023);
        mpfr_init(r59024);
        mpfr_init(r59025);
        mpfr_init(r59026);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r58991, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58993, mpfr_cmp(r58991, r58992) <= 0, MPFR_RNDN);
        mpfr_set_d(r58994, x, MPFR_RNDN);
        mpfr_tan(r58995, r58994, MPFR_RNDN);
        mpfr_tan(r58996, r58991, MPFR_RNDN);
        mpfr_add(r58997, r58995, r58996, MPFR_RNDN);
        ;
        mpfr_mul(r58999, r58995, r58996, MPFR_RNDN);
        mpfr_sub(r59000, r58998, r58999, MPFR_RNDN);
        mpfr_div(r59001, r58997, r59000, MPFR_RNDN);
        mpfr_mul(r59002, r59001, r59001, MPFR_RNDN);
        mpfr_mul(r59003, r58995, r58995, MPFR_RNDN);
        mpfr_sub(r59004, r59002, r59003, MPFR_RNDN);
        mpfr_add(r59005, r59001, r58995, MPFR_RNDN);
        mpfr_div(r59006, r59004, r59005, MPFR_RNDN);
        ;
        mpfr_set_si(r59008, mpfr_cmp(r58991, r59007) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r59010, r58991, r59009, MPFR_RNDN);
        ;
        mpfr_pow(r59012, r58994, r59011, MPFR_RNDN);
        mpfr_mul(r59013, r59010, r59012, MPFR_RNDN);
        mpfr_pow(r59014, r58991, r59011, MPFR_RNDN);
        mpfr_mul(r59015, r59014, r58994, MPFR_RNDN);
        mpfr_add(r59016, r59013, r59015, MPFR_RNDN);
        mpfr_add(r59017, r58991, r59016, MPFR_RNDN);
        mpfr_cos(r59018, r58994, MPFR_RNDN);
        mpfr_mul(r59019, r58997, r59018, MPFR_RNDN);
        mpfr_sin(r59020, r58994, MPFR_RNDN);
        mpfr_mul(r59021, r59000, r59020, MPFR_RNDN);
        mpfr_sub(r59022, r59019, r59021, MPFR_RNDN);
        mpfr_mul(r59023, r59000, r59018, MPFR_RNDN);
        mpfr_div(r59024, r59022, r59023, MPFR_RNDN);
        if (mpfr_get_si(r59008, MPFR_RNDN)) { mpfr_set(r59025, r59017, MPFR_RNDN); } else { mpfr_set(r59025, r59024, MPFR_RNDN); };
        if (mpfr_get_si(r58993, MPFR_RNDN)) { mpfr_set(r59026, r59006, MPFR_RNDN); } else { mpfr_set(r59026, r59025, MPFR_RNDN); };
        return mpfr_get_d(r59026, MPFR_RNDN);
}

