#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 r4876261 = x;
        float r4876262 = eps;
        float r4876263 = r4876261 + r4876262;
        float r4876264 = tan(r4876263);
        float r4876265 = tan(r4876261);
        float r4876266 = r4876264 - r4876265;
        return r4876266;
}

double f_id(double x, double eps) {
        double r4876267 = x;
        double r4876268 = eps;
        double r4876269 = r4876267 + r4876268;
        double r4876270 = tan(r4876269);
        double r4876271 = tan(r4876267);
        double r4876272 = r4876270 - r4876271;
        return r4876272;
}


double f_of(float x, float eps) {
        float r4876273 = eps;
        float r4876274 = -1.2423933280735359e-26f;
        bool r4876275 = r4876273 <= r4876274;
        float r4876276 = x;
        float r4876277 = tan(r4876276);
        float r4876278 = tan(r4876273);
        float r4876279 = r4876277 + r4876278;
        float r4876280 = cos(r4876276);
        float r4876281 = r4876279 * r4876280;
        float r4876282 = 1.0f;
        float r4876283 = r4876277 * r4876278;
        float r4876284 = r4876282 - r4876283;
        float r4876285 = sin(r4876276);
        float r4876286 = r4876284 * r4876285;
        float r4876287 = r4876281 - r4876286;
        float r4876288 = r4876284 * r4876280;
        float r4876289 = r4876287 / r4876288;
        float r4876290 = 6.648853381887418e-19f;
        bool r4876291 = r4876273 <= r4876290;
        float r4876292 = 3.0f;
        float r4876293 = pow(r4876273, r4876292);
        float r4876294 = 2.0f;
        float r4876295 = pow(r4876276, r4876294);
        float r4876296 = r4876293 * r4876295;
        float r4876297 = pow(r4876273, r4876294);
        float r4876298 = r4876297 * r4876276;
        float r4876299 = r4876273 + r4876298;
        float r4876300 = r4876296 + r4876299;
        float r4876301 = r4876291 ? r4876300 : r4876289;
        float r4876302 = r4876275 ? r4876289 : r4876301;
        return r4876302;
}

double f_od(double x, double eps) {
        double r4876303 = eps;
        double r4876304 = -1.2423933280735359e-26;
        bool r4876305 = r4876303 <= r4876304;
        double r4876306 = x;
        double r4876307 = tan(r4876306);
        double r4876308 = tan(r4876303);
        double r4876309 = r4876307 + r4876308;
        double r4876310 = cos(r4876306);
        double r4876311 = r4876309 * r4876310;
        double r4876312 = 1.0;
        double r4876313 = r4876307 * r4876308;
        double r4876314 = r4876312 - r4876313;
        double r4876315 = sin(r4876306);
        double r4876316 = r4876314 * r4876315;
        double r4876317 = r4876311 - r4876316;
        double r4876318 = r4876314 * r4876310;
        double r4876319 = r4876317 / r4876318;
        double r4876320 = 6.648853381887418e-19;
        bool r4876321 = r4876303 <= r4876320;
        double r4876322 = 3.0;
        double r4876323 = pow(r4876303, r4876322);
        double r4876324 = 2.0;
        double r4876325 = pow(r4876306, r4876324);
        double r4876326 = r4876323 * r4876325;
        double r4876327 = pow(r4876303, r4876324);
        double r4876328 = r4876327 * r4876306;
        double r4876329 = r4876303 + r4876328;
        double r4876330 = r4876326 + r4876329;
        double r4876331 = r4876321 ? r4876330 : r4876319;
        double r4876332 = r4876305 ? r4876319 : r4876331;
        return r4876332;
}

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 r4876333, r4876334, r4876335, r4876336, r4876337, r4876338;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4876333);
        mpfr_init(r4876334);
        mpfr_init(r4876335);
        mpfr_init(r4876336);
        mpfr_init(r4876337);
        mpfr_init(r4876338);
}

double f_im(double x, double eps) {
        mpfr_set_d(r4876333, x, MPFR_RNDN);
        mpfr_set_d(r4876334, eps, MPFR_RNDN);
        mpfr_add(r4876335, r4876333, r4876334, MPFR_RNDN);
        mpfr_tan(r4876336, r4876335, MPFR_RNDN);
        mpfr_tan(r4876337, r4876333, MPFR_RNDN);
        mpfr_sub(r4876338, r4876336, r4876337, MPFR_RNDN);
        return mpfr_get_d(r4876338, MPFR_RNDN);
}

static mpfr_t r4876339, r4876340, r4876341, r4876342, r4876343, r4876344, r4876345, r4876346, r4876347, r4876348, r4876349, r4876350, r4876351, r4876352, r4876353, r4876354, r4876355, r4876356, r4876357, r4876358, r4876359, r4876360, r4876361, r4876362, r4876363, r4876364, r4876365, r4876366, r4876367, r4876368;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4876339);
        mpfr_init_set_str(r4876340, "-1.2423933280735359e-26", 10, MPFR_RNDN);
        mpfr_init(r4876341);
        mpfr_init(r4876342);
        mpfr_init(r4876343);
        mpfr_init(r4876344);
        mpfr_init(r4876345);
        mpfr_init(r4876346);
        mpfr_init(r4876347);
        mpfr_init_set_str(r4876348, "1", 10, MPFR_RNDN);
        mpfr_init(r4876349);
        mpfr_init(r4876350);
        mpfr_init(r4876351);
        mpfr_init(r4876352);
        mpfr_init(r4876353);
        mpfr_init(r4876354);
        mpfr_init(r4876355);
        mpfr_init_set_str(r4876356, "6.648853381887418e-19", 10, MPFR_RNDN);
        mpfr_init(r4876357);
        mpfr_init_set_str(r4876358, "3", 10, MPFR_RNDN);
        mpfr_init(r4876359);
        mpfr_init_set_str(r4876360, "2", 10, MPFR_RNDN);
        mpfr_init(r4876361);
        mpfr_init(r4876362);
        mpfr_init(r4876363);
        mpfr_init(r4876364);
        mpfr_init(r4876365);
        mpfr_init(r4876366);
        mpfr_init(r4876367);
        mpfr_init(r4876368);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r4876339, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4876341, mpfr_cmp(r4876339, r4876340) <= 0, MPFR_RNDN);
        mpfr_set_d(r4876342, x, MPFR_RNDN);
        mpfr_tan(r4876343, r4876342, MPFR_RNDN);
        mpfr_tan(r4876344, r4876339, MPFR_RNDN);
        mpfr_add(r4876345, r4876343, r4876344, MPFR_RNDN);
        mpfr_cos(r4876346, r4876342, MPFR_RNDN);
        mpfr_mul(r4876347, r4876345, r4876346, MPFR_RNDN);
        ;
        mpfr_mul(r4876349, r4876343, r4876344, MPFR_RNDN);
        mpfr_sub(r4876350, r4876348, r4876349, MPFR_RNDN);
        mpfr_sin(r4876351, r4876342, MPFR_RNDN);
        mpfr_mul(r4876352, r4876350, r4876351, MPFR_RNDN);
        mpfr_sub(r4876353, r4876347, r4876352, MPFR_RNDN);
        mpfr_mul(r4876354, r4876350, r4876346, MPFR_RNDN);
        mpfr_div(r4876355, r4876353, r4876354, MPFR_RNDN);
        ;
        mpfr_set_si(r4876357, mpfr_cmp(r4876339, r4876356) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r4876359, r4876339, r4876358, MPFR_RNDN);
        ;
        mpfr_pow(r4876361, r4876342, r4876360, MPFR_RNDN);
        mpfr_mul(r4876362, r4876359, r4876361, MPFR_RNDN);
        mpfr_pow(r4876363, r4876339, r4876360, MPFR_RNDN);
        mpfr_mul(r4876364, r4876363, r4876342, MPFR_RNDN);
        mpfr_add(r4876365, r4876339, r4876364, MPFR_RNDN);
        mpfr_add(r4876366, r4876362, r4876365, MPFR_RNDN);
        if (mpfr_get_si(r4876357, MPFR_RNDN)) { mpfr_set(r4876367, r4876366, MPFR_RNDN); } else { mpfr_set(r4876367, r4876355, MPFR_RNDN); };
        if (mpfr_get_si(r4876341, MPFR_RNDN)) { mpfr_set(r4876368, r4876355, MPFR_RNDN); } else { mpfr_set(r4876368, r4876367, MPFR_RNDN); };
        return mpfr_get_d(r4876368, MPFR_RNDN);
}

static mpfr_t r4876369, r4876370, r4876371, r4876372, r4876373, r4876374, r4876375, r4876376, r4876377, r4876378, r4876379, r4876380, r4876381, r4876382, r4876383, r4876384, r4876385, r4876386, r4876387, r4876388, r4876389, r4876390, r4876391, r4876392, r4876393, r4876394, r4876395, r4876396, r4876397, r4876398;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4876369);
        mpfr_init_set_str(r4876370, "-1.2423933280735359e-26", 10, MPFR_RNDN);
        mpfr_init(r4876371);
        mpfr_init(r4876372);
        mpfr_init(r4876373);
        mpfr_init(r4876374);
        mpfr_init(r4876375);
        mpfr_init(r4876376);
        mpfr_init(r4876377);
        mpfr_init_set_str(r4876378, "1", 10, MPFR_RNDN);
        mpfr_init(r4876379);
        mpfr_init(r4876380);
        mpfr_init(r4876381);
        mpfr_init(r4876382);
        mpfr_init(r4876383);
        mpfr_init(r4876384);
        mpfr_init(r4876385);
        mpfr_init_set_str(r4876386, "6.648853381887418e-19", 10, MPFR_RNDN);
        mpfr_init(r4876387);
        mpfr_init_set_str(r4876388, "3", 10, MPFR_RNDN);
        mpfr_init(r4876389);
        mpfr_init_set_str(r4876390, "2", 10, MPFR_RNDN);
        mpfr_init(r4876391);
        mpfr_init(r4876392);
        mpfr_init(r4876393);
        mpfr_init(r4876394);
        mpfr_init(r4876395);
        mpfr_init(r4876396);
        mpfr_init(r4876397);
        mpfr_init(r4876398);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r4876369, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4876371, mpfr_cmp(r4876369, r4876370) <= 0, MPFR_RNDN);
        mpfr_set_d(r4876372, x, MPFR_RNDN);
        mpfr_tan(r4876373, r4876372, MPFR_RNDN);
        mpfr_tan(r4876374, r4876369, MPFR_RNDN);
        mpfr_add(r4876375, r4876373, r4876374, MPFR_RNDN);
        mpfr_cos(r4876376, r4876372, MPFR_RNDN);
        mpfr_mul(r4876377, r4876375, r4876376, MPFR_RNDN);
        ;
        mpfr_mul(r4876379, r4876373, r4876374, MPFR_RNDN);
        mpfr_sub(r4876380, r4876378, r4876379, MPFR_RNDN);
        mpfr_sin(r4876381, r4876372, MPFR_RNDN);
        mpfr_mul(r4876382, r4876380, r4876381, MPFR_RNDN);
        mpfr_sub(r4876383, r4876377, r4876382, MPFR_RNDN);
        mpfr_mul(r4876384, r4876380, r4876376, MPFR_RNDN);
        mpfr_div(r4876385, r4876383, r4876384, MPFR_RNDN);
        ;
        mpfr_set_si(r4876387, mpfr_cmp(r4876369, r4876386) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r4876389, r4876369, r4876388, MPFR_RNDN);
        ;
        mpfr_pow(r4876391, r4876372, r4876390, MPFR_RNDN);
        mpfr_mul(r4876392, r4876389, r4876391, MPFR_RNDN);
        mpfr_pow(r4876393, r4876369, r4876390, MPFR_RNDN);
        mpfr_mul(r4876394, r4876393, r4876372, MPFR_RNDN);
        mpfr_add(r4876395, r4876369, r4876394, MPFR_RNDN);
        mpfr_add(r4876396, r4876392, r4876395, MPFR_RNDN);
        if (mpfr_get_si(r4876387, MPFR_RNDN)) { mpfr_set(r4876397, r4876396, MPFR_RNDN); } else { mpfr_set(r4876397, r4876385, MPFR_RNDN); };
        if (mpfr_get_si(r4876371, MPFR_RNDN)) { mpfr_set(r4876398, r4876385, MPFR_RNDN); } else { mpfr_set(r4876398, r4876397, MPFR_RNDN); };
        return mpfr_get_d(r4876398, MPFR_RNDN);
}

