#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 r4502116 = x;
        float r4502117 = eps;
        float r4502118 = r4502116 + r4502117;
        float r4502119 = tan(r4502118);
        float r4502120 = tan(r4502116);
        float r4502121 = r4502119 - r4502120;
        return r4502121;
}

double f_id(double x, double eps) {
        double r4502122 = x;
        double r4502123 = eps;
        double r4502124 = r4502122 + r4502123;
        double r4502125 = tan(r4502124);
        double r4502126 = tan(r4502122);
        double r4502127 = r4502125 - r4502126;
        return r4502127;
}


double f_of(float x, float eps) {
        float r4502128 = eps;
        float r4502129 = -8.786347343699343e-16f;
        bool r4502130 = r4502128 <= r4502129;
        float r4502131 = x;
        float r4502132 = tan(r4502131);
        float r4502133 = tan(r4502128);
        float r4502134 = r4502132 + r4502133;
        float r4502135 = 1.0f;
        float r4502136 = r4502132 * r4502133;
        float r4502137 = r4502135 - r4502136;
        float r4502138 = r4502135 / r4502137;
        float r4502139 = r4502134 * r4502138;
        float r4502140 = r4502139 - r4502132;
        float r4502141 = 4.27193241580942e-33f;
        bool r4502142 = r4502128 <= r4502141;
        float r4502143 = 4.0f;
        float r4502144 = pow(r4502128, r4502143);
        float r4502145 = r4502131 * (r4502131 * r4502131);
        float r4502146 = r4502144 * r4502145;
        float r4502147 = r4502131 * r4502131;
        float r4502148 = r4502128 * (r4502128 * r4502128);
        float r4502149 = r4502147 * r4502148;
        float r4502150 = r4502128 + r4502149;
        float r4502151 = r4502146 + r4502150;
        float r4502152 = r4502132 * r4502132;
        float r4502153 = r4502133 * r4502133;
        float r4502154 = r4502152 - r4502153;
        float r4502155 = r4502154 * r4502135;
        float r4502156 = cos(r4502131);
        float r4502157 = r4502155 * r4502156;
        float r4502158 = r4502132 - r4502133;
        float r4502159 = r4502158 * r4502137;
        float r4502160 = sin(r4502131);
        float r4502161 = r4502159 * r4502160;
        float r4502162 = r4502157 - r4502161;
        float r4502163 = r4502159 * r4502156;
        float r4502164 = r4502162 / r4502163;
        float r4502165 = r4502142 ? r4502151 : r4502164;
        float r4502166 = r4502130 ? r4502140 : r4502165;
        return r4502166;
}

double f_od(double x, double eps) {
        double r4502167 = eps;
        double r4502168 = -8.786347343699343e-16;
        bool r4502169 = r4502167 <= r4502168;
        double r4502170 = x;
        double r4502171 = tan(r4502170);
        double r4502172 = tan(r4502167);
        double r4502173 = r4502171 + r4502172;
        double r4502174 = 1.0;
        double r4502175 = r4502171 * r4502172;
        double r4502176 = r4502174 - r4502175;
        double r4502177 = r4502174 / r4502176;
        double r4502178 = r4502173 * r4502177;
        double r4502179 = r4502178 - r4502171;
        double r4502180 = 4.27193241580942e-33;
        bool r4502181 = r4502167 <= r4502180;
        double r4502182 = 4.0;
        double r4502183 = pow(r4502167, r4502182);
        double r4502184 = r4502170 * (r4502170 * r4502170);
        double r4502185 = r4502183 * r4502184;
        double r4502186 = r4502170 * r4502170;
        double r4502187 = r4502167 * (r4502167 * r4502167);
        double r4502188 = r4502186 * r4502187;
        double r4502189 = r4502167 + r4502188;
        double r4502190 = r4502185 + r4502189;
        double r4502191 = r4502171 * r4502171;
        double r4502192 = r4502172 * r4502172;
        double r4502193 = r4502191 - r4502192;
        double r4502194 = r4502193 * r4502174;
        double r4502195 = cos(r4502170);
        double r4502196 = r4502194 * r4502195;
        double r4502197 = r4502171 - r4502172;
        double r4502198 = r4502197 * r4502176;
        double r4502199 = sin(r4502170);
        double r4502200 = r4502198 * r4502199;
        double r4502201 = r4502196 - r4502200;
        double r4502202 = r4502198 * r4502195;
        double r4502203 = r4502201 / r4502202;
        double r4502204 = r4502181 ? r4502190 : r4502203;
        double r4502205 = r4502169 ? r4502179 : r4502204;
        return r4502205;
}

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 r4502206, r4502207, r4502208, r4502209, r4502210, r4502211;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4502206);
        mpfr_init(r4502207);
        mpfr_init(r4502208);
        mpfr_init(r4502209);
        mpfr_init(r4502210);
        mpfr_init(r4502211);
}

double f_im(double x, double eps) {
        mpfr_set_d(r4502206, x, MPFR_RNDN);
        mpfr_set_d(r4502207, eps, MPFR_RNDN);
        mpfr_add(r4502208, r4502206, r4502207, MPFR_RNDN);
        mpfr_tan(r4502209, r4502208, MPFR_RNDN);
        mpfr_tan(r4502210, r4502206, MPFR_RNDN);
        mpfr_sub(r4502211, r4502209, r4502210, MPFR_RNDN);
        return mpfr_get_d(r4502211, MPFR_RNDN);
}

static mpfr_t r4502212, r4502213, r4502214, r4502215, r4502216, r4502217, r4502218, r4502219, r4502220, r4502221, r4502222, r4502223, r4502224, r4502225, r4502226, r4502227, r4502228, r4502229, r4502230, r4502231, r4502232, r4502233, r4502234, r4502235, r4502236, r4502237, r4502238, r4502239, r4502240, r4502241, r4502242, r4502243, r4502244, r4502245, r4502246, r4502247, r4502248, r4502249, r4502250;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4502212);
        mpfr_init_set_str(r4502213, "-8.786347343699343e-16", 10, MPFR_RNDN);
        mpfr_init(r4502214);
        mpfr_init(r4502215);
        mpfr_init(r4502216);
        mpfr_init(r4502217);
        mpfr_init(r4502218);
        mpfr_init_set_str(r4502219, "1", 10, MPFR_RNDN);
        mpfr_init(r4502220);
        mpfr_init(r4502221);
        mpfr_init(r4502222);
        mpfr_init(r4502223);
        mpfr_init(r4502224);
        mpfr_init_set_str(r4502225, "4.27193241580942e-33", 10, MPFR_RNDN);
        mpfr_init(r4502226);
        mpfr_init_set_str(r4502227, "4", 10, MPFR_RNDN);
        mpfr_init(r4502228);
        mpfr_init(r4502229);
        mpfr_init(r4502230);
        mpfr_init(r4502231);
        mpfr_init(r4502232);
        mpfr_init(r4502233);
        mpfr_init(r4502234);
        mpfr_init(r4502235);
        mpfr_init(r4502236);
        mpfr_init(r4502237);
        mpfr_init(r4502238);
        mpfr_init(r4502239);
        mpfr_init(r4502240);
        mpfr_init(r4502241);
        mpfr_init(r4502242);
        mpfr_init(r4502243);
        mpfr_init(r4502244);
        mpfr_init(r4502245);
        mpfr_init(r4502246);
        mpfr_init(r4502247);
        mpfr_init(r4502248);
        mpfr_init(r4502249);
        mpfr_init(r4502250);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r4502212, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4502214, mpfr_cmp(r4502212, r4502213) <= 0, MPFR_RNDN);
        mpfr_set_d(r4502215, x, MPFR_RNDN);
        mpfr_tan(r4502216, r4502215, MPFR_RNDN);
        mpfr_tan(r4502217, r4502212, MPFR_RNDN);
        mpfr_add(r4502218, r4502216, r4502217, MPFR_RNDN);
        ;
        mpfr_mul(r4502220, r4502216, r4502217, MPFR_RNDN);
        mpfr_sub(r4502221, r4502219, r4502220, MPFR_RNDN);
        mpfr_div(r4502222, r4502219, r4502221, MPFR_RNDN);
        mpfr_mul(r4502223, r4502218, r4502222, MPFR_RNDN);
        mpfr_sub(r4502224, r4502223, r4502216, MPFR_RNDN);
        ;
        mpfr_set_si(r4502226, mpfr_cmp(r4502212, r4502225) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r4502228, r4502212, r4502227, MPFR_RNDN);
        mpfr_mul(r4502229, r4502215, r4502215, MPFR_RNDN); mpfr_mul(r4502229, r4502229, r4502215, MPFR_RNDN);
        mpfr_mul(r4502230, r4502228, r4502229, MPFR_RNDN);
        mpfr_sqr(r4502231, r4502215, MPFR_RNDN);
        mpfr_mul(r4502232, r4502212, r4502212, MPFR_RNDN); mpfr_mul(r4502232, r4502232, r4502212, MPFR_RNDN);
        mpfr_mul(r4502233, r4502231, r4502232, MPFR_RNDN);
        mpfr_add(r4502234, r4502212, r4502233, MPFR_RNDN);
        mpfr_add(r4502235, r4502230, r4502234, MPFR_RNDN);
        mpfr_sqr(r4502236, r4502216, MPFR_RNDN);
        mpfr_sqr(r4502237, r4502217, MPFR_RNDN);
        mpfr_sub(r4502238, r4502236, r4502237, MPFR_RNDN);
        mpfr_mul(r4502239, r4502238, r4502219, MPFR_RNDN);
        mpfr_cos(r4502240, r4502215, MPFR_RNDN);
        mpfr_mul(r4502241, r4502239, r4502240, MPFR_RNDN);
        mpfr_sub(r4502242, r4502216, r4502217, MPFR_RNDN);
        mpfr_mul(r4502243, r4502242, r4502221, MPFR_RNDN);
        mpfr_sin(r4502244, r4502215, MPFR_RNDN);
        mpfr_mul(r4502245, r4502243, r4502244, MPFR_RNDN);
        mpfr_sub(r4502246, r4502241, r4502245, MPFR_RNDN);
        mpfr_mul(r4502247, r4502243, r4502240, MPFR_RNDN);
        mpfr_div(r4502248, r4502246, r4502247, MPFR_RNDN);
        if (mpfr_get_si(r4502226, MPFR_RNDN)) { mpfr_set(r4502249, r4502235, MPFR_RNDN); } else { mpfr_set(r4502249, r4502248, MPFR_RNDN); };
        if (mpfr_get_si(r4502214, MPFR_RNDN)) { mpfr_set(r4502250, r4502224, MPFR_RNDN); } else { mpfr_set(r4502250, r4502249, MPFR_RNDN); };
        return mpfr_get_d(r4502250, MPFR_RNDN);
}

static mpfr_t r4502251, r4502252, r4502253, r4502254, r4502255, r4502256, r4502257, r4502258, r4502259, r4502260, r4502261, r4502262, r4502263, r4502264, r4502265, r4502266, r4502267, r4502268, r4502269, r4502270, r4502271, r4502272, r4502273, r4502274, r4502275, r4502276, r4502277, r4502278, r4502279, r4502280, r4502281, r4502282, r4502283, r4502284, r4502285, r4502286, r4502287, r4502288, r4502289;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4502251);
        mpfr_init_set_str(r4502252, "-8.786347343699343e-16", 10, MPFR_RNDN);
        mpfr_init(r4502253);
        mpfr_init(r4502254);
        mpfr_init(r4502255);
        mpfr_init(r4502256);
        mpfr_init(r4502257);
        mpfr_init_set_str(r4502258, "1", 10, MPFR_RNDN);
        mpfr_init(r4502259);
        mpfr_init(r4502260);
        mpfr_init(r4502261);
        mpfr_init(r4502262);
        mpfr_init(r4502263);
        mpfr_init_set_str(r4502264, "4.27193241580942e-33", 10, MPFR_RNDN);
        mpfr_init(r4502265);
        mpfr_init_set_str(r4502266, "4", 10, MPFR_RNDN);
        mpfr_init(r4502267);
        mpfr_init(r4502268);
        mpfr_init(r4502269);
        mpfr_init(r4502270);
        mpfr_init(r4502271);
        mpfr_init(r4502272);
        mpfr_init(r4502273);
        mpfr_init(r4502274);
        mpfr_init(r4502275);
        mpfr_init(r4502276);
        mpfr_init(r4502277);
        mpfr_init(r4502278);
        mpfr_init(r4502279);
        mpfr_init(r4502280);
        mpfr_init(r4502281);
        mpfr_init(r4502282);
        mpfr_init(r4502283);
        mpfr_init(r4502284);
        mpfr_init(r4502285);
        mpfr_init(r4502286);
        mpfr_init(r4502287);
        mpfr_init(r4502288);
        mpfr_init(r4502289);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r4502251, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4502253, mpfr_cmp(r4502251, r4502252) <= 0, MPFR_RNDN);
        mpfr_set_d(r4502254, x, MPFR_RNDN);
        mpfr_tan(r4502255, r4502254, MPFR_RNDN);
        mpfr_tan(r4502256, r4502251, MPFR_RNDN);
        mpfr_add(r4502257, r4502255, r4502256, MPFR_RNDN);
        ;
        mpfr_mul(r4502259, r4502255, r4502256, MPFR_RNDN);
        mpfr_sub(r4502260, r4502258, r4502259, MPFR_RNDN);
        mpfr_div(r4502261, r4502258, r4502260, MPFR_RNDN);
        mpfr_mul(r4502262, r4502257, r4502261, MPFR_RNDN);
        mpfr_sub(r4502263, r4502262, r4502255, MPFR_RNDN);
        ;
        mpfr_set_si(r4502265, mpfr_cmp(r4502251, r4502264) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r4502267, r4502251, r4502266, MPFR_RNDN);
        mpfr_mul(r4502268, r4502254, r4502254, MPFR_RNDN); mpfr_mul(r4502268, r4502268, r4502254, MPFR_RNDN);
        mpfr_mul(r4502269, r4502267, r4502268, MPFR_RNDN);
        mpfr_sqr(r4502270, r4502254, MPFR_RNDN);
        mpfr_mul(r4502271, r4502251, r4502251, MPFR_RNDN); mpfr_mul(r4502271, r4502271, r4502251, MPFR_RNDN);
        mpfr_mul(r4502272, r4502270, r4502271, MPFR_RNDN);
        mpfr_add(r4502273, r4502251, r4502272, MPFR_RNDN);
        mpfr_add(r4502274, r4502269, r4502273, MPFR_RNDN);
        mpfr_sqr(r4502275, r4502255, MPFR_RNDN);
        mpfr_sqr(r4502276, r4502256, MPFR_RNDN);
        mpfr_sub(r4502277, r4502275, r4502276, MPFR_RNDN);
        mpfr_mul(r4502278, r4502277, r4502258, MPFR_RNDN);
        mpfr_cos(r4502279, r4502254, MPFR_RNDN);
        mpfr_mul(r4502280, r4502278, r4502279, MPFR_RNDN);
        mpfr_sub(r4502281, r4502255, r4502256, MPFR_RNDN);
        mpfr_mul(r4502282, r4502281, r4502260, MPFR_RNDN);
        mpfr_sin(r4502283, r4502254, MPFR_RNDN);
        mpfr_mul(r4502284, r4502282, r4502283, MPFR_RNDN);
        mpfr_sub(r4502285, r4502280, r4502284, MPFR_RNDN);
        mpfr_mul(r4502286, r4502282, r4502279, MPFR_RNDN);
        mpfr_div(r4502287, r4502285, r4502286, MPFR_RNDN);
        if (mpfr_get_si(r4502265, MPFR_RNDN)) { mpfr_set(r4502288, r4502274, MPFR_RNDN); } else { mpfr_set(r4502288, r4502287, MPFR_RNDN); };
        if (mpfr_get_si(r4502253, MPFR_RNDN)) { mpfr_set(r4502289, r4502263, MPFR_RNDN); } else { mpfr_set(r4502289, r4502288, MPFR_RNDN); };
        return mpfr_get_d(r4502289, MPFR_RNDN);
}

