#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 r20872 = x;
        float r20873 = eps;
        float r20874 = r20872 + r20873;
        float r20875 = tan(r20874);
        float r20876 = tan(r20872);
        float r20877 = r20875 - r20876;
        return r20877;
}

double f_id(double x, double eps) {
        double r20878 = x;
        double r20879 = eps;
        double r20880 = r20878 + r20879;
        double r20881 = tan(r20880);
        double r20882 = tan(r20878);
        double r20883 = r20881 - r20882;
        return r20883;
}


double f_of(float x, float eps) {
        float r20884 = eps;
        float r20885 = -3.151429688885422e-36f;
        bool r20886 = r20884 <= r20885;
        float r20887 = x;
        float r20888 = tan(r20887);
        float r20889 = tan(r20884);
        float r20890 = r20888 + r20889;
        float r20891 = 1.0f;
        float r20892 = sin(r20887);
        float r20893 = r20892 * (r20892 * r20892);
        float r20894 = sin(r20884);
        float r20895 = r20894 * (r20894 * r20894);
        float r20896 = r20893 * r20895;
        float r20897 = cbrt(r20896);
        float r20898 = cos(r20887);
        float r20899 = r20898 * (r20898 * r20898);
        float r20900 = cos(r20884);
        float r20901 = r20900 * (r20900 * r20900);
        float r20902 = r20899 * r20901;
        float r20903 = cbrt(r20902);
        float r20904 = r20897 / r20903;
        float r20905 = r20891 - r20904;
        float r20906 = r20890 / r20905;
        float r20907 = r20906 - r20888;
        float r20908 = 2.4432831384469056e-19f;
        bool r20909 = r20884 <= r20908;
        float r20910 = r20887 * r20887;
        float r20911 = r20884 * (r20884 * r20884);
        float r20912 = r20910 * r20911;
        float r20913 = 4.0f;
        float r20914 = pow(r20884, r20913);
        float r20915 = r20887 * (r20887 * r20887);
        float r20916 = r20914 * r20915;
        float r20917 = r20912 + r20916;
        float r20918 = r20917 + r20884;
        float r20919 = r20890 * r20898;
        float r20920 = r20888 * (r20888 * r20888);
        float r20921 = r20889 * (r20889 * r20889);
        float r20922 = r20920 * r20921;
        float r20923 = cbrt(r20922);
        float r20924 = r20891 - r20923;
        float r20925 = r20924 * r20892;
        float r20926 = r20919 - r20925;
        float r20927 = r20924 * r20898;
        float r20928 = r20926 / r20927;
        float r20929 = r20909 ? r20918 : r20928;
        float r20930 = r20886 ? r20907 : r20929;
        return r20930;
}

double f_od(double x, double eps) {
        double r20931 = eps;
        double r20932 = -3.151429688885422e-36;
        bool r20933 = r20931 <= r20932;
        double r20934 = x;
        double r20935 = tan(r20934);
        double r20936 = tan(r20931);
        double r20937 = r20935 + r20936;
        double r20938 = 1.0;
        double r20939 = sin(r20934);
        double r20940 = r20939 * (r20939 * r20939);
        double r20941 = sin(r20931);
        double r20942 = r20941 * (r20941 * r20941);
        double r20943 = r20940 * r20942;
        double r20944 = cbrt(r20943);
        double r20945 = cos(r20934);
        double r20946 = r20945 * (r20945 * r20945);
        double r20947 = cos(r20931);
        double r20948 = r20947 * (r20947 * r20947);
        double r20949 = r20946 * r20948;
        double r20950 = cbrt(r20949);
        double r20951 = r20944 / r20950;
        double r20952 = r20938 - r20951;
        double r20953 = r20937 / r20952;
        double r20954 = r20953 - r20935;
        double r20955 = 2.4432831384469056e-19;
        bool r20956 = r20931 <= r20955;
        double r20957 = r20934 * r20934;
        double r20958 = r20931 * (r20931 * r20931);
        double r20959 = r20957 * r20958;
        double r20960 = 4.0;
        double r20961 = pow(r20931, r20960);
        double r20962 = r20934 * (r20934 * r20934);
        double r20963 = r20961 * r20962;
        double r20964 = r20959 + r20963;
        double r20965 = r20964 + r20931;
        double r20966 = r20937 * r20945;
        double r20967 = r20935 * (r20935 * r20935);
        double r20968 = r20936 * (r20936 * r20936);
        double r20969 = r20967 * r20968;
        double r20970 = cbrt(r20969);
        double r20971 = r20938 - r20970;
        double r20972 = r20971 * r20939;
        double r20973 = r20966 - r20972;
        double r20974 = r20971 * r20945;
        double r20975 = r20973 / r20974;
        double r20976 = r20956 ? r20965 : r20975;
        double r20977 = r20933 ? r20954 : r20976;
        return r20977;
}

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 r20978, r20979, r20980, r20981, r20982, r20983;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r20978);
        mpfr_init(r20979);
        mpfr_init(r20980);
        mpfr_init(r20981);
        mpfr_init(r20982);
        mpfr_init(r20983);
}

double f_im(double x, double eps) {
        mpfr_set_d(r20978, x, MPFR_RNDN);
        mpfr_set_d(r20979, eps, MPFR_RNDN);
        mpfr_add(r20980, r20978, r20979, MPFR_RNDN);
        mpfr_tan(r20981, r20980, MPFR_RNDN);
        mpfr_tan(r20982, r20978, MPFR_RNDN);
        mpfr_sub(r20983, r20981, r20982, MPFR_RNDN);
        return mpfr_get_d(r20983, MPFR_RNDN);
}

static mpfr_t r20984, r20985, r20986, r20987, r20988, r20989, r20990, r20991, r20992, r20993, r20994, r20995, r20996, r20997, r20998, r20999, r21000, r21001, r21002, r21003, r21004, r21005, r21006, r21007, r21008, r21009, r21010, r21011, r21012, r21013, r21014, r21015, r21016, r21017, r21018, r21019, r21020, r21021, r21022, r21023, r21024, r21025, r21026, r21027, r21028, r21029, r21030;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r20984);
        mpfr_init_set_str(r20985, "-3.151429688885422e-36", 10, MPFR_RNDN);
        mpfr_init(r20986);
        mpfr_init(r20987);
        mpfr_init(r20988);
        mpfr_init(r20989);
        mpfr_init(r20990);
        mpfr_init_set_str(r20991, "1", 10, MPFR_RNDN);
        mpfr_init(r20992);
        mpfr_init(r20993);
        mpfr_init(r20994);
        mpfr_init(r20995);
        mpfr_init(r20996);
        mpfr_init(r20997);
        mpfr_init(r20998);
        mpfr_init(r20999);
        mpfr_init(r21000);
        mpfr_init(r21001);
        mpfr_init(r21002);
        mpfr_init(r21003);
        mpfr_init(r21004);
        mpfr_init(r21005);
        mpfr_init(r21006);
        mpfr_init(r21007);
        mpfr_init_set_str(r21008, "2.4432831384469056e-19", 10, MPFR_RNDN);
        mpfr_init(r21009);
        mpfr_init(r21010);
        mpfr_init(r21011);
        mpfr_init(r21012);
        mpfr_init_set_str(r21013, "4", 10, MPFR_RNDN);
        mpfr_init(r21014);
        mpfr_init(r21015);
        mpfr_init(r21016);
        mpfr_init(r21017);
        mpfr_init(r21018);
        mpfr_init(r21019);
        mpfr_init(r21020);
        mpfr_init(r21021);
        mpfr_init(r21022);
        mpfr_init(r21023);
        mpfr_init(r21024);
        mpfr_init(r21025);
        mpfr_init(r21026);
        mpfr_init(r21027);
        mpfr_init(r21028);
        mpfr_init(r21029);
        mpfr_init(r21030);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r20984, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r20986, mpfr_cmp(r20984, r20985) <= 0, MPFR_RNDN);
        mpfr_set_d(r20987, x, MPFR_RNDN);
        mpfr_tan(r20988, r20987, MPFR_RNDN);
        mpfr_tan(r20989, r20984, MPFR_RNDN);
        mpfr_add(r20990, r20988, r20989, MPFR_RNDN);
        ;
        mpfr_sin(r20992, r20987, MPFR_RNDN);
        mpfr_mul(r20993, r20992, r20992, MPFR_RNDN); mpfr_mul(r20993, r20993, r20992, MPFR_RNDN);
        mpfr_sin(r20994, r20984, MPFR_RNDN);
        mpfr_mul(r20995, r20994, r20994, MPFR_RNDN); mpfr_mul(r20995, r20995, r20994, MPFR_RNDN);
        mpfr_mul(r20996, r20993, r20995, MPFR_RNDN);
        mpfr_cbrt(r20997, r20996, MPFR_RNDN);
        mpfr_cos(r20998, r20987, MPFR_RNDN);
        mpfr_mul(r20999, r20998, r20998, MPFR_RNDN); mpfr_mul(r20999, r20999, r20998, MPFR_RNDN);
        mpfr_cos(r21000, r20984, MPFR_RNDN);
        mpfr_mul(r21001, r21000, r21000, MPFR_RNDN); mpfr_mul(r21001, r21001, r21000, MPFR_RNDN);
        mpfr_mul(r21002, r20999, r21001, MPFR_RNDN);
        mpfr_cbrt(r21003, r21002, MPFR_RNDN);
        mpfr_div(r21004, r20997, r21003, MPFR_RNDN);
        mpfr_sub(r21005, r20991, r21004, MPFR_RNDN);
        mpfr_div(r21006, r20990, r21005, MPFR_RNDN);
        mpfr_sub(r21007, r21006, r20988, MPFR_RNDN);
        ;
        mpfr_set_si(r21009, mpfr_cmp(r20984, r21008) <= 0, MPFR_RNDN);
        mpfr_sqr(r21010, r20987, MPFR_RNDN);
        mpfr_mul(r21011, r20984, r20984, MPFR_RNDN); mpfr_mul(r21011, r21011, r20984, MPFR_RNDN);
        mpfr_mul(r21012, r21010, r21011, MPFR_RNDN);
        ;
        mpfr_pow(r21014, r20984, r21013, MPFR_RNDN);
        mpfr_mul(r21015, r20987, r20987, MPFR_RNDN); mpfr_mul(r21015, r21015, r20987, MPFR_RNDN);
        mpfr_mul(r21016, r21014, r21015, MPFR_RNDN);
        mpfr_add(r21017, r21012, r21016, MPFR_RNDN);
        mpfr_add(r21018, r21017, r20984, MPFR_RNDN);
        mpfr_mul(r21019, r20990, r20998, MPFR_RNDN);
        mpfr_mul(r21020, r20988, r20988, MPFR_RNDN); mpfr_mul(r21020, r21020, r20988, MPFR_RNDN);
        mpfr_mul(r21021, r20989, r20989, MPFR_RNDN); mpfr_mul(r21021, r21021, r20989, MPFR_RNDN);
        mpfr_mul(r21022, r21020, r21021, MPFR_RNDN);
        mpfr_cbrt(r21023, r21022, MPFR_RNDN);
        mpfr_sub(r21024, r20991, r21023, MPFR_RNDN);
        mpfr_mul(r21025, r21024, r20992, MPFR_RNDN);
        mpfr_sub(r21026, r21019, r21025, MPFR_RNDN);
        mpfr_mul(r21027, r21024, r20998, MPFR_RNDN);
        mpfr_div(r21028, r21026, r21027, MPFR_RNDN);
        if (mpfr_get_si(r21009, MPFR_RNDN)) { mpfr_set(r21029, r21018, MPFR_RNDN); } else { mpfr_set(r21029, r21028, MPFR_RNDN); };
        if (mpfr_get_si(r20986, MPFR_RNDN)) { mpfr_set(r21030, r21007, MPFR_RNDN); } else { mpfr_set(r21030, r21029, MPFR_RNDN); };
        return mpfr_get_d(r21030, MPFR_RNDN);
}

static mpfr_t r21031, r21032, r21033, r21034, r21035, r21036, r21037, r21038, r21039, r21040, r21041, r21042, r21043, r21044, r21045, r21046, r21047, r21048, r21049, r21050, r21051, r21052, r21053, r21054, r21055, r21056, r21057, r21058, r21059, r21060, r21061, r21062, r21063, r21064, r21065, r21066, r21067, r21068, r21069, r21070, r21071, r21072, r21073, r21074, r21075, r21076, r21077;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r21031);
        mpfr_init_set_str(r21032, "-3.151429688885422e-36", 10, MPFR_RNDN);
        mpfr_init(r21033);
        mpfr_init(r21034);
        mpfr_init(r21035);
        mpfr_init(r21036);
        mpfr_init(r21037);
        mpfr_init_set_str(r21038, "1", 10, MPFR_RNDN);
        mpfr_init(r21039);
        mpfr_init(r21040);
        mpfr_init(r21041);
        mpfr_init(r21042);
        mpfr_init(r21043);
        mpfr_init(r21044);
        mpfr_init(r21045);
        mpfr_init(r21046);
        mpfr_init(r21047);
        mpfr_init(r21048);
        mpfr_init(r21049);
        mpfr_init(r21050);
        mpfr_init(r21051);
        mpfr_init(r21052);
        mpfr_init(r21053);
        mpfr_init(r21054);
        mpfr_init_set_str(r21055, "2.4432831384469056e-19", 10, MPFR_RNDN);
        mpfr_init(r21056);
        mpfr_init(r21057);
        mpfr_init(r21058);
        mpfr_init(r21059);
        mpfr_init_set_str(r21060, "4", 10, MPFR_RNDN);
        mpfr_init(r21061);
        mpfr_init(r21062);
        mpfr_init(r21063);
        mpfr_init(r21064);
        mpfr_init(r21065);
        mpfr_init(r21066);
        mpfr_init(r21067);
        mpfr_init(r21068);
        mpfr_init(r21069);
        mpfr_init(r21070);
        mpfr_init(r21071);
        mpfr_init(r21072);
        mpfr_init(r21073);
        mpfr_init(r21074);
        mpfr_init(r21075);
        mpfr_init(r21076);
        mpfr_init(r21077);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r21031, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r21033, mpfr_cmp(r21031, r21032) <= 0, MPFR_RNDN);
        mpfr_set_d(r21034, x, MPFR_RNDN);
        mpfr_tan(r21035, r21034, MPFR_RNDN);
        mpfr_tan(r21036, r21031, MPFR_RNDN);
        mpfr_add(r21037, r21035, r21036, MPFR_RNDN);
        ;
        mpfr_sin(r21039, r21034, MPFR_RNDN);
        mpfr_mul(r21040, r21039, r21039, MPFR_RNDN); mpfr_mul(r21040, r21040, r21039, MPFR_RNDN);
        mpfr_sin(r21041, r21031, MPFR_RNDN);
        mpfr_mul(r21042, r21041, r21041, MPFR_RNDN); mpfr_mul(r21042, r21042, r21041, MPFR_RNDN);
        mpfr_mul(r21043, r21040, r21042, MPFR_RNDN);
        mpfr_cbrt(r21044, r21043, MPFR_RNDN);
        mpfr_cos(r21045, r21034, MPFR_RNDN);
        mpfr_mul(r21046, r21045, r21045, MPFR_RNDN); mpfr_mul(r21046, r21046, r21045, MPFR_RNDN);
        mpfr_cos(r21047, r21031, MPFR_RNDN);
        mpfr_mul(r21048, r21047, r21047, MPFR_RNDN); mpfr_mul(r21048, r21048, r21047, MPFR_RNDN);
        mpfr_mul(r21049, r21046, r21048, MPFR_RNDN);
        mpfr_cbrt(r21050, r21049, MPFR_RNDN);
        mpfr_div(r21051, r21044, r21050, MPFR_RNDN);
        mpfr_sub(r21052, r21038, r21051, MPFR_RNDN);
        mpfr_div(r21053, r21037, r21052, MPFR_RNDN);
        mpfr_sub(r21054, r21053, r21035, MPFR_RNDN);
        ;
        mpfr_set_si(r21056, mpfr_cmp(r21031, r21055) <= 0, MPFR_RNDN);
        mpfr_sqr(r21057, r21034, MPFR_RNDN);
        mpfr_mul(r21058, r21031, r21031, MPFR_RNDN); mpfr_mul(r21058, r21058, r21031, MPFR_RNDN);
        mpfr_mul(r21059, r21057, r21058, MPFR_RNDN);
        ;
        mpfr_pow(r21061, r21031, r21060, MPFR_RNDN);
        mpfr_mul(r21062, r21034, r21034, MPFR_RNDN); mpfr_mul(r21062, r21062, r21034, MPFR_RNDN);
        mpfr_mul(r21063, r21061, r21062, MPFR_RNDN);
        mpfr_add(r21064, r21059, r21063, MPFR_RNDN);
        mpfr_add(r21065, r21064, r21031, MPFR_RNDN);
        mpfr_mul(r21066, r21037, r21045, MPFR_RNDN);
        mpfr_mul(r21067, r21035, r21035, MPFR_RNDN); mpfr_mul(r21067, r21067, r21035, MPFR_RNDN);
        mpfr_mul(r21068, r21036, r21036, MPFR_RNDN); mpfr_mul(r21068, r21068, r21036, MPFR_RNDN);
        mpfr_mul(r21069, r21067, r21068, MPFR_RNDN);
        mpfr_cbrt(r21070, r21069, MPFR_RNDN);
        mpfr_sub(r21071, r21038, r21070, MPFR_RNDN);
        mpfr_mul(r21072, r21071, r21039, MPFR_RNDN);
        mpfr_sub(r21073, r21066, r21072, MPFR_RNDN);
        mpfr_mul(r21074, r21071, r21045, MPFR_RNDN);
        mpfr_div(r21075, r21073, r21074, MPFR_RNDN);
        if (mpfr_get_si(r21056, MPFR_RNDN)) { mpfr_set(r21076, r21065, MPFR_RNDN); } else { mpfr_set(r21076, r21075, MPFR_RNDN); };
        if (mpfr_get_si(r21033, MPFR_RNDN)) { mpfr_set(r21077, r21054, MPFR_RNDN); } else { mpfr_set(r21077, r21076, MPFR_RNDN); };
        return mpfr_get_d(r21077, MPFR_RNDN);
}

