#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 r19911 = x;
        float r19912 = eps;
        float r19913 = r19911 + r19912;
        float r19914 = tan(r19913);
        float r19915 = tan(r19911);
        float r19916 = r19914 - r19915;
        return r19916;
}

double f_id(double x, double eps) {
        double r19917 = x;
        double r19918 = eps;
        double r19919 = r19917 + r19918;
        double r19920 = tan(r19919);
        double r19921 = tan(r19917);
        double r19922 = r19920 - r19921;
        return r19922;
}


double f_of(float x, float eps) {
        float r19923 = eps;
        float r19924 = -2.4610266585566768e-113f;
        bool r19925 = r19923 <= r19924;
        float r19926 = x;
        float r19927 = tan(r19926);
        float r19928 = tan(r19923);
        float r19929 = r19927 + r19928;
        float r19930 = 1.0f;
        float r19931 = r19927 * r19928;
        float r19932 = r19930 - r19931;
        float r19933 = r19929 / r19932;
        float r19934 = r19933 * r19933;
        float r19935 = r19927 * r19927;
        float r19936 = r19934 - r19935;
        float r19937 = r19933 + r19927;
        float r19938 = r19936 / r19937;
        float r19939 = 3.1547769921923584e-35f;
        bool r19940 = r19923 <= r19939;
        float r19941 = r19926 * r19926;
        float r19942 = r19923 * (r19923 * r19923);
        float r19943 = r19941 * r19942;
        float r19944 = r19926 * (r19926 * r19926);
        float r19945 = 4.0f;
        float r19946 = pow(r19923, r19945);
        float r19947 = r19944 * r19946;
        float r19948 = r19923 + r19947;
        float r19949 = r19943 + r19948;
        float r19950 = r19928 + r19927;
        float r19951 = sin(r19926);
        float r19952 = r19928 * r19951;
        float r19953 = r19952 * (r19952 * r19952);
        float r19954 = cos(r19926);
        float r19955 = r19954 * (r19954 * r19954);
        float r19956 = r19953 / r19955;
        float r19957 = r19930 - r19956;
        float r19958 = r19950 / r19957;
        float r19959 = r19930 * r19930;
        float r19960 = r19931 * r19931;
        float r19961 = r19930 * r19931;
        float r19962 = r19960 + r19961;
        float r19963 = r19959 + r19962;
        float r19964 = r19958 * r19963;
        float r19965 = r19964 - r19927;
        float r19966 = r19940 ? r19949 : r19965;
        float r19967 = r19925 ? r19938 : r19966;
        return r19967;
}

double f_od(double x, double eps) {
        double r19968 = eps;
        double r19969 = -2.4610266585566768e-113;
        bool r19970 = r19968 <= r19969;
        double r19971 = x;
        double r19972 = tan(r19971);
        double r19973 = tan(r19968);
        double r19974 = r19972 + r19973;
        double r19975 = 1.0;
        double r19976 = r19972 * r19973;
        double r19977 = r19975 - r19976;
        double r19978 = r19974 / r19977;
        double r19979 = r19978 * r19978;
        double r19980 = r19972 * r19972;
        double r19981 = r19979 - r19980;
        double r19982 = r19978 + r19972;
        double r19983 = r19981 / r19982;
        double r19984 = 3.1547769921923584e-35;
        bool r19985 = r19968 <= r19984;
        double r19986 = r19971 * r19971;
        double r19987 = r19968 * (r19968 * r19968);
        double r19988 = r19986 * r19987;
        double r19989 = r19971 * (r19971 * r19971);
        double r19990 = 4.0;
        double r19991 = pow(r19968, r19990);
        double r19992 = r19989 * r19991;
        double r19993 = r19968 + r19992;
        double r19994 = r19988 + r19993;
        double r19995 = r19973 + r19972;
        double r19996 = sin(r19971);
        double r19997 = r19973 * r19996;
        double r19998 = r19997 * (r19997 * r19997);
        double r19999 = cos(r19971);
        double r20000 = r19999 * (r19999 * r19999);
        double r20001 = r19998 / r20000;
        double r20002 = r19975 - r20001;
        double r20003 = r19995 / r20002;
        double r20004 = r19975 * r19975;
        double r20005 = r19976 * r19976;
        double r20006 = r19975 * r19976;
        double r20007 = r20005 + r20006;
        double r20008 = r20004 + r20007;
        double r20009 = r20003 * r20008;
        double r20010 = r20009 - r19972;
        double r20011 = r19985 ? r19994 : r20010;
        double r20012 = r19970 ? r19983 : r20011;
        return r20012;
}

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 r20013, r20014, r20015, r20016, r20017, r20018;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r20013);
        mpfr_init(r20014);
        mpfr_init(r20015);
        mpfr_init(r20016);
        mpfr_init(r20017);
        mpfr_init(r20018);
}

double f_im(double x, double eps) {
        mpfr_set_d(r20013, x, MPFR_RNDN);
        mpfr_set_d(r20014, eps, MPFR_RNDN);
        mpfr_add(r20015, r20013, r20014, MPFR_RNDN);
        mpfr_tan(r20016, r20015, MPFR_RNDN);
        mpfr_tan(r20017, r20013, MPFR_RNDN);
        mpfr_sub(r20018, r20016, r20017, MPFR_RNDN);
        return mpfr_get_d(r20018, MPFR_RNDN);
}

static mpfr_t r20019, r20020, r20021, r20022, r20023, r20024, r20025, r20026, r20027, r20028, r20029, r20030, r20031, r20032, r20033, r20034, r20035, r20036, r20037, r20038, r20039, r20040, r20041, r20042, r20043, r20044, r20045, r20046, r20047, r20048, r20049, r20050, r20051, r20052, r20053, r20054, r20055, r20056, r20057, r20058, r20059, r20060, r20061, r20062, r20063;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r20019);
        mpfr_init_set_str(r20020, "-2.4610266585566768e-113", 10, MPFR_RNDN);
        mpfr_init(r20021);
        mpfr_init(r20022);
        mpfr_init(r20023);
        mpfr_init(r20024);
        mpfr_init(r20025);
        mpfr_init_set_str(r20026, "1", 10, MPFR_RNDN);
        mpfr_init(r20027);
        mpfr_init(r20028);
        mpfr_init(r20029);
        mpfr_init(r20030);
        mpfr_init(r20031);
        mpfr_init(r20032);
        mpfr_init(r20033);
        mpfr_init(r20034);
        mpfr_init_set_str(r20035, "3.1547769921923584e-35", 10, MPFR_RNDN);
        mpfr_init(r20036);
        mpfr_init(r20037);
        mpfr_init(r20038);
        mpfr_init(r20039);
        mpfr_init(r20040);
        mpfr_init_set_str(r20041, "4", 10, MPFR_RNDN);
        mpfr_init(r20042);
        mpfr_init(r20043);
        mpfr_init(r20044);
        mpfr_init(r20045);
        mpfr_init(r20046);
        mpfr_init(r20047);
        mpfr_init(r20048);
        mpfr_init(r20049);
        mpfr_init(r20050);
        mpfr_init(r20051);
        mpfr_init(r20052);
        mpfr_init(r20053);
        mpfr_init(r20054);
        mpfr_init(r20055);
        mpfr_init(r20056);
        mpfr_init(r20057);
        mpfr_init(r20058);
        mpfr_init(r20059);
        mpfr_init(r20060);
        mpfr_init(r20061);
        mpfr_init(r20062);
        mpfr_init(r20063);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r20019, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r20021, mpfr_cmp(r20019, r20020) <= 0, MPFR_RNDN);
        mpfr_set_d(r20022, x, MPFR_RNDN);
        mpfr_tan(r20023, r20022, MPFR_RNDN);
        mpfr_tan(r20024, r20019, MPFR_RNDN);
        mpfr_add(r20025, r20023, r20024, MPFR_RNDN);
        ;
        mpfr_mul(r20027, r20023, r20024, MPFR_RNDN);
        mpfr_sub(r20028, r20026, r20027, MPFR_RNDN);
        mpfr_div(r20029, r20025, r20028, MPFR_RNDN);
        mpfr_sqr(r20030, r20029, MPFR_RNDN);
        mpfr_sqr(r20031, r20023, MPFR_RNDN);
        mpfr_sub(r20032, r20030, r20031, MPFR_RNDN);
        mpfr_add(r20033, r20029, r20023, MPFR_RNDN);
        mpfr_div(r20034, r20032, r20033, MPFR_RNDN);
        ;
        mpfr_set_si(r20036, mpfr_cmp(r20019, r20035) <= 0, MPFR_RNDN);
        mpfr_sqr(r20037, r20022, MPFR_RNDN);
        mpfr_mul(r20038, r20019, r20019, MPFR_RNDN); mpfr_mul(r20038, r20038, r20019, MPFR_RNDN);
        mpfr_mul(r20039, r20037, r20038, MPFR_RNDN);
        mpfr_mul(r20040, r20022, r20022, MPFR_RNDN); mpfr_mul(r20040, r20040, r20022, MPFR_RNDN);
        ;
        mpfr_pow(r20042, r20019, r20041, MPFR_RNDN);
        mpfr_mul(r20043, r20040, r20042, MPFR_RNDN);
        mpfr_add(r20044, r20019, r20043, MPFR_RNDN);
        mpfr_add(r20045, r20039, r20044, MPFR_RNDN);
        mpfr_add(r20046, r20024, r20023, MPFR_RNDN);
        mpfr_sin(r20047, r20022, MPFR_RNDN);
        mpfr_mul(r20048, r20024, r20047, MPFR_RNDN);
        mpfr_mul(r20049, r20048, r20048, MPFR_RNDN); mpfr_mul(r20049, r20049, r20048, MPFR_RNDN);
        mpfr_cos(r20050, r20022, MPFR_RNDN);
        mpfr_mul(r20051, r20050, r20050, MPFR_RNDN); mpfr_mul(r20051, r20051, r20050, MPFR_RNDN);
        mpfr_div(r20052, r20049, r20051, MPFR_RNDN);
        mpfr_sub(r20053, r20026, r20052, MPFR_RNDN);
        mpfr_div(r20054, r20046, r20053, MPFR_RNDN);
        mpfr_sqr(r20055, r20026, MPFR_RNDN);
        mpfr_sqr(r20056, r20027, MPFR_RNDN);
        mpfr_mul(r20057, r20026, r20027, MPFR_RNDN);
        mpfr_add(r20058, r20056, r20057, MPFR_RNDN);
        mpfr_add(r20059, r20055, r20058, MPFR_RNDN);
        mpfr_mul(r20060, r20054, r20059, MPFR_RNDN);
        mpfr_sub(r20061, r20060, r20023, MPFR_RNDN);
        if (mpfr_get_si(r20036, MPFR_RNDN)) { mpfr_set(r20062, r20045, MPFR_RNDN); } else { mpfr_set(r20062, r20061, MPFR_RNDN); };
        if (mpfr_get_si(r20021, MPFR_RNDN)) { mpfr_set(r20063, r20034, MPFR_RNDN); } else { mpfr_set(r20063, r20062, MPFR_RNDN); };
        return mpfr_get_d(r20063, MPFR_RNDN);
}

static mpfr_t r20064, r20065, r20066, r20067, r20068, r20069, r20070, r20071, r20072, r20073, r20074, r20075, r20076, r20077, r20078, r20079, r20080, r20081, r20082, r20083, r20084, r20085, r20086, r20087, r20088, r20089, r20090, r20091, r20092, r20093, r20094, r20095, r20096, r20097, r20098, r20099, r20100, r20101, r20102, r20103, r20104, r20105, r20106, r20107, r20108;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r20064);
        mpfr_init_set_str(r20065, "-2.4610266585566768e-113", 10, MPFR_RNDN);
        mpfr_init(r20066);
        mpfr_init(r20067);
        mpfr_init(r20068);
        mpfr_init(r20069);
        mpfr_init(r20070);
        mpfr_init_set_str(r20071, "1", 10, MPFR_RNDN);
        mpfr_init(r20072);
        mpfr_init(r20073);
        mpfr_init(r20074);
        mpfr_init(r20075);
        mpfr_init(r20076);
        mpfr_init(r20077);
        mpfr_init(r20078);
        mpfr_init(r20079);
        mpfr_init_set_str(r20080, "3.1547769921923584e-35", 10, MPFR_RNDN);
        mpfr_init(r20081);
        mpfr_init(r20082);
        mpfr_init(r20083);
        mpfr_init(r20084);
        mpfr_init(r20085);
        mpfr_init_set_str(r20086, "4", 10, MPFR_RNDN);
        mpfr_init(r20087);
        mpfr_init(r20088);
        mpfr_init(r20089);
        mpfr_init(r20090);
        mpfr_init(r20091);
        mpfr_init(r20092);
        mpfr_init(r20093);
        mpfr_init(r20094);
        mpfr_init(r20095);
        mpfr_init(r20096);
        mpfr_init(r20097);
        mpfr_init(r20098);
        mpfr_init(r20099);
        mpfr_init(r20100);
        mpfr_init(r20101);
        mpfr_init(r20102);
        mpfr_init(r20103);
        mpfr_init(r20104);
        mpfr_init(r20105);
        mpfr_init(r20106);
        mpfr_init(r20107);
        mpfr_init(r20108);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r20064, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r20066, mpfr_cmp(r20064, r20065) <= 0, MPFR_RNDN);
        mpfr_set_d(r20067, x, MPFR_RNDN);
        mpfr_tan(r20068, r20067, MPFR_RNDN);
        mpfr_tan(r20069, r20064, MPFR_RNDN);
        mpfr_add(r20070, r20068, r20069, MPFR_RNDN);
        ;
        mpfr_mul(r20072, r20068, r20069, MPFR_RNDN);
        mpfr_sub(r20073, r20071, r20072, MPFR_RNDN);
        mpfr_div(r20074, r20070, r20073, MPFR_RNDN);
        mpfr_sqr(r20075, r20074, MPFR_RNDN);
        mpfr_sqr(r20076, r20068, MPFR_RNDN);
        mpfr_sub(r20077, r20075, r20076, MPFR_RNDN);
        mpfr_add(r20078, r20074, r20068, MPFR_RNDN);
        mpfr_div(r20079, r20077, r20078, MPFR_RNDN);
        ;
        mpfr_set_si(r20081, mpfr_cmp(r20064, r20080) <= 0, MPFR_RNDN);
        mpfr_sqr(r20082, r20067, MPFR_RNDN);
        mpfr_mul(r20083, r20064, r20064, MPFR_RNDN); mpfr_mul(r20083, r20083, r20064, MPFR_RNDN);
        mpfr_mul(r20084, r20082, r20083, MPFR_RNDN);
        mpfr_mul(r20085, r20067, r20067, MPFR_RNDN); mpfr_mul(r20085, r20085, r20067, MPFR_RNDN);
        ;
        mpfr_pow(r20087, r20064, r20086, MPFR_RNDN);
        mpfr_mul(r20088, r20085, r20087, MPFR_RNDN);
        mpfr_add(r20089, r20064, r20088, MPFR_RNDN);
        mpfr_add(r20090, r20084, r20089, MPFR_RNDN);
        mpfr_add(r20091, r20069, r20068, MPFR_RNDN);
        mpfr_sin(r20092, r20067, MPFR_RNDN);
        mpfr_mul(r20093, r20069, r20092, MPFR_RNDN);
        mpfr_mul(r20094, r20093, r20093, MPFR_RNDN); mpfr_mul(r20094, r20094, r20093, MPFR_RNDN);
        mpfr_cos(r20095, r20067, MPFR_RNDN);
        mpfr_mul(r20096, r20095, r20095, MPFR_RNDN); mpfr_mul(r20096, r20096, r20095, MPFR_RNDN);
        mpfr_div(r20097, r20094, r20096, MPFR_RNDN);
        mpfr_sub(r20098, r20071, r20097, MPFR_RNDN);
        mpfr_div(r20099, r20091, r20098, MPFR_RNDN);
        mpfr_sqr(r20100, r20071, MPFR_RNDN);
        mpfr_sqr(r20101, r20072, MPFR_RNDN);
        mpfr_mul(r20102, r20071, r20072, MPFR_RNDN);
        mpfr_add(r20103, r20101, r20102, MPFR_RNDN);
        mpfr_add(r20104, r20100, r20103, MPFR_RNDN);
        mpfr_mul(r20105, r20099, r20104, MPFR_RNDN);
        mpfr_sub(r20106, r20105, r20068, MPFR_RNDN);
        if (mpfr_get_si(r20081, MPFR_RNDN)) { mpfr_set(r20107, r20090, MPFR_RNDN); } else { mpfr_set(r20107, r20106, MPFR_RNDN); };
        if (mpfr_get_si(r20066, MPFR_RNDN)) { mpfr_set(r20108, r20079, MPFR_RNDN); } else { mpfr_set(r20108, r20107, MPFR_RNDN); };
        return mpfr_get_d(r20108, MPFR_RNDN);
}

