#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 r58251 = x;
        float r58252 = eps;
        float r58253 = r58251 + r58252;
        float r58254 = tan(r58253);
        float r58255 = tan(r58251);
        float r58256 = r58254 - r58255;
        return r58256;
}

double f_id(double x, double eps) {
        double r58257 = x;
        double r58258 = eps;
        double r58259 = r58257 + r58258;
        double r58260 = tan(r58259);
        double r58261 = tan(r58257);
        double r58262 = r58260 - r58261;
        return r58262;
}


double f_of(float x, float eps) {
        float r58263 = eps;
        float r58264 = -1.939839550679413e-37f;
        bool r58265 = r58263 <= r58264;
        float r58266 = x;
        float r58267 = tan(r58266);
        float r58268 = tan(r58263);
        float r58269 = r58267 + r58268;
        float r58270 = 1.0f;
        float r58271 = sin(r58266);
        float r58272 = sin(r58263);
        float r58273 = r58271 * r58272;
        float r58274 = cos(r58266);
        float r58275 = cos(r58263);
        float r58276 = r58274 * r58275;
        float r58277 = r58273 / r58276;
        float r58278 = r58270 - r58277;
        float r58279 = r58269 / r58278;
        float r58280 = r58279 - r58267;
        float r58281 = 7.011714412203457e-69f;
        bool r58282 = r58263 <= r58281;
        float r58283 = 4.0f;
        float r58284 = pow(r58263, r58283);
        float r58285 = r58266 * (r58266 * r58266);
        float r58286 = r58284 * r58285;
        float r58287 = r58263 + r58286;
        float r58288 = r58263 * (r58263 * r58263);
        float r58289 = r58266 * r58266;
        float r58290 = r58288 * r58289;
        float r58291 = r58287 + r58290;
        float r58292 = r58269 * r58274;
        float r58293 = r58278 * r58271;
        float r58294 = r58292 - r58293;
        float r58295 = r58278 * r58274;
        float r58296 = r58294 / r58295;
        float r58297 = r58282 ? r58291 : r58296;
        float r58298 = r58265 ? r58280 : r58297;
        return r58298;
}

double f_od(double x, double eps) {
        double r58299 = eps;
        double r58300 = -1.939839550679413e-37;
        bool r58301 = r58299 <= r58300;
        double r58302 = x;
        double r58303 = tan(r58302);
        double r58304 = tan(r58299);
        double r58305 = r58303 + r58304;
        double r58306 = 1.0;
        double r58307 = sin(r58302);
        double r58308 = sin(r58299);
        double r58309 = r58307 * r58308;
        double r58310 = cos(r58302);
        double r58311 = cos(r58299);
        double r58312 = r58310 * r58311;
        double r58313 = r58309 / r58312;
        double r58314 = r58306 - r58313;
        double r58315 = r58305 / r58314;
        double r58316 = r58315 - r58303;
        double r58317 = 7.011714412203457e-69;
        bool r58318 = r58299 <= r58317;
        double r58319 = 4.0;
        double r58320 = pow(r58299, r58319);
        double r58321 = r58302 * (r58302 * r58302);
        double r58322 = r58320 * r58321;
        double r58323 = r58299 + r58322;
        double r58324 = r58299 * (r58299 * r58299);
        double r58325 = r58302 * r58302;
        double r58326 = r58324 * r58325;
        double r58327 = r58323 + r58326;
        double r58328 = r58305 * r58310;
        double r58329 = r58314 * r58307;
        double r58330 = r58328 - r58329;
        double r58331 = r58314 * r58310;
        double r58332 = r58330 / r58331;
        double r58333 = r58318 ? r58327 : r58332;
        double r58334 = r58301 ? r58316 : r58333;
        return r58334;
}

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 r58335, r58336, r58337, r58338, r58339, r58340;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r58335);
        mpfr_init(r58336);
        mpfr_init(r58337);
        mpfr_init(r58338);
        mpfr_init(r58339);
        mpfr_init(r58340);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58335, x, MPFR_RNDN);
        mpfr_set_d(r58336, eps, MPFR_RNDN);
        mpfr_add(r58337, r58335, r58336, MPFR_RNDN);
        mpfr_tan(r58338, r58337, MPFR_RNDN);
        mpfr_tan(r58339, r58335, MPFR_RNDN);
        mpfr_sub(r58340, r58338, r58339, MPFR_RNDN);
        return mpfr_get_d(r58340, MPFR_RNDN);
}

static mpfr_t r58341, r58342, r58343, r58344, r58345, r58346, r58347, r58348, r58349, r58350, r58351, r58352, r58353, r58354, r58355, r58356, r58357, r58358, r58359, r58360, r58361, r58362, r58363, r58364, r58365, r58366, r58367, r58368, r58369, r58370, r58371, r58372, r58373, r58374, r58375, r58376;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r58341);
        mpfr_init_set_str(r58342, "-1.939839550679413e-37", 10, MPFR_RNDN);
        mpfr_init(r58343);
        mpfr_init(r58344);
        mpfr_init(r58345);
        mpfr_init(r58346);
        mpfr_init(r58347);
        mpfr_init_set_str(r58348, "1", 10, MPFR_RNDN);
        mpfr_init(r58349);
        mpfr_init(r58350);
        mpfr_init(r58351);
        mpfr_init(r58352);
        mpfr_init(r58353);
        mpfr_init(r58354);
        mpfr_init(r58355);
        mpfr_init(r58356);
        mpfr_init(r58357);
        mpfr_init(r58358);
        mpfr_init_set_str(r58359, "7.011714412203457e-69", 10, MPFR_RNDN);
        mpfr_init(r58360);
        mpfr_init_set_str(r58361, "4", 10, MPFR_RNDN);
        mpfr_init(r58362);
        mpfr_init(r58363);
        mpfr_init(r58364);
        mpfr_init(r58365);
        mpfr_init(r58366);
        mpfr_init(r58367);
        mpfr_init(r58368);
        mpfr_init(r58369);
        mpfr_init(r58370);
        mpfr_init(r58371);
        mpfr_init(r58372);
        mpfr_init(r58373);
        mpfr_init(r58374);
        mpfr_init(r58375);
        mpfr_init(r58376);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58341, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58343, mpfr_cmp(r58341, r58342) <= 0, MPFR_RNDN);
        mpfr_set_d(r58344, x, MPFR_RNDN);
        mpfr_tan(r58345, r58344, MPFR_RNDN);
        mpfr_tan(r58346, r58341, MPFR_RNDN);
        mpfr_add(r58347, r58345, r58346, MPFR_RNDN);
        ;
        mpfr_sin(r58349, r58344, MPFR_RNDN);
        mpfr_sin(r58350, r58341, MPFR_RNDN);
        mpfr_mul(r58351, r58349, r58350, MPFR_RNDN);
        mpfr_cos(r58352, r58344, MPFR_RNDN);
        mpfr_cos(r58353, r58341, MPFR_RNDN);
        mpfr_mul(r58354, r58352, r58353, MPFR_RNDN);
        mpfr_div(r58355, r58351, r58354, MPFR_RNDN);
        mpfr_sub(r58356, r58348, r58355, MPFR_RNDN);
        mpfr_div(r58357, r58347, r58356, MPFR_RNDN);
        mpfr_sub(r58358, r58357, r58345, MPFR_RNDN);
        ;
        mpfr_set_si(r58360, mpfr_cmp(r58341, r58359) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r58362, r58341, r58361, MPFR_RNDN);
        mpfr_mul(r58363, r58344, r58344, MPFR_RNDN); mpfr_mul(r58363, r58363, r58344, MPFR_RNDN);
        mpfr_mul(r58364, r58362, r58363, MPFR_RNDN);
        mpfr_add(r58365, r58341, r58364, MPFR_RNDN);
        mpfr_mul(r58366, r58341, r58341, MPFR_RNDN); mpfr_mul(r58366, r58366, r58341, MPFR_RNDN);
        mpfr_sqr(r58367, r58344, MPFR_RNDN);
        mpfr_mul(r58368, r58366, r58367, MPFR_RNDN);
        mpfr_add(r58369, r58365, r58368, MPFR_RNDN);
        mpfr_mul(r58370, r58347, r58352, MPFR_RNDN);
        mpfr_mul(r58371, r58356, r58349, MPFR_RNDN);
        mpfr_sub(r58372, r58370, r58371, MPFR_RNDN);
        mpfr_mul(r58373, r58356, r58352, MPFR_RNDN);
        mpfr_div(r58374, r58372, r58373, MPFR_RNDN);
        if (mpfr_get_si(r58360, MPFR_RNDN)) { mpfr_set(r58375, r58369, MPFR_RNDN); } else { mpfr_set(r58375, r58374, MPFR_RNDN); };
        if (mpfr_get_si(r58343, MPFR_RNDN)) { mpfr_set(r58376, r58358, MPFR_RNDN); } else { mpfr_set(r58376, r58375, MPFR_RNDN); };
        return mpfr_get_d(r58376, MPFR_RNDN);
}

static mpfr_t r58377, r58378, r58379, r58380, r58381, r58382, r58383, r58384, r58385, r58386, r58387, r58388, r58389, r58390, r58391, r58392, r58393, r58394, r58395, r58396, r58397, r58398, r58399, r58400, r58401, r58402, r58403, r58404, r58405, r58406, r58407, r58408, r58409, r58410, r58411, r58412;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r58377);
        mpfr_init_set_str(r58378, "-1.939839550679413e-37", 10, MPFR_RNDN);
        mpfr_init(r58379);
        mpfr_init(r58380);
        mpfr_init(r58381);
        mpfr_init(r58382);
        mpfr_init(r58383);
        mpfr_init_set_str(r58384, "1", 10, MPFR_RNDN);
        mpfr_init(r58385);
        mpfr_init(r58386);
        mpfr_init(r58387);
        mpfr_init(r58388);
        mpfr_init(r58389);
        mpfr_init(r58390);
        mpfr_init(r58391);
        mpfr_init(r58392);
        mpfr_init(r58393);
        mpfr_init(r58394);
        mpfr_init_set_str(r58395, "7.011714412203457e-69", 10, MPFR_RNDN);
        mpfr_init(r58396);
        mpfr_init_set_str(r58397, "4", 10, MPFR_RNDN);
        mpfr_init(r58398);
        mpfr_init(r58399);
        mpfr_init(r58400);
        mpfr_init(r58401);
        mpfr_init(r58402);
        mpfr_init(r58403);
        mpfr_init(r58404);
        mpfr_init(r58405);
        mpfr_init(r58406);
        mpfr_init(r58407);
        mpfr_init(r58408);
        mpfr_init(r58409);
        mpfr_init(r58410);
        mpfr_init(r58411);
        mpfr_init(r58412);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r58377, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58379, mpfr_cmp(r58377, r58378) <= 0, MPFR_RNDN);
        mpfr_set_d(r58380, x, MPFR_RNDN);
        mpfr_tan(r58381, r58380, MPFR_RNDN);
        mpfr_tan(r58382, r58377, MPFR_RNDN);
        mpfr_add(r58383, r58381, r58382, MPFR_RNDN);
        ;
        mpfr_sin(r58385, r58380, MPFR_RNDN);
        mpfr_sin(r58386, r58377, MPFR_RNDN);
        mpfr_mul(r58387, r58385, r58386, MPFR_RNDN);
        mpfr_cos(r58388, r58380, MPFR_RNDN);
        mpfr_cos(r58389, r58377, MPFR_RNDN);
        mpfr_mul(r58390, r58388, r58389, MPFR_RNDN);
        mpfr_div(r58391, r58387, r58390, MPFR_RNDN);
        mpfr_sub(r58392, r58384, r58391, MPFR_RNDN);
        mpfr_div(r58393, r58383, r58392, MPFR_RNDN);
        mpfr_sub(r58394, r58393, r58381, MPFR_RNDN);
        ;
        mpfr_set_si(r58396, mpfr_cmp(r58377, r58395) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r58398, r58377, r58397, MPFR_RNDN);
        mpfr_mul(r58399, r58380, r58380, MPFR_RNDN); mpfr_mul(r58399, r58399, r58380, MPFR_RNDN);
        mpfr_mul(r58400, r58398, r58399, MPFR_RNDN);
        mpfr_add(r58401, r58377, r58400, MPFR_RNDN);
        mpfr_mul(r58402, r58377, r58377, MPFR_RNDN); mpfr_mul(r58402, r58402, r58377, MPFR_RNDN);
        mpfr_sqr(r58403, r58380, MPFR_RNDN);
        mpfr_mul(r58404, r58402, r58403, MPFR_RNDN);
        mpfr_add(r58405, r58401, r58404, MPFR_RNDN);
        mpfr_mul(r58406, r58383, r58388, MPFR_RNDN);
        mpfr_mul(r58407, r58392, r58385, MPFR_RNDN);
        mpfr_sub(r58408, r58406, r58407, MPFR_RNDN);
        mpfr_mul(r58409, r58392, r58388, MPFR_RNDN);
        mpfr_div(r58410, r58408, r58409, MPFR_RNDN);
        if (mpfr_get_si(r58396, MPFR_RNDN)) { mpfr_set(r58411, r58405, MPFR_RNDN); } else { mpfr_set(r58411, r58410, MPFR_RNDN); };
        if (mpfr_get_si(r58379, MPFR_RNDN)) { mpfr_set(r58412, r58394, MPFR_RNDN); } else { mpfr_set(r58412, r58411, MPFR_RNDN); };
        return mpfr_get_d(r58412, MPFR_RNDN);
}

