#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 r4941260 = x;
        float r4941261 = eps;
        float r4941262 = r4941260 + r4941261;
        float r4941263 = tan(r4941262);
        float r4941264 = tan(r4941260);
        float r4941265 = r4941263 - r4941264;
        return r4941265;
}

double f_id(double x, double eps) {
        double r4941266 = x;
        double r4941267 = eps;
        double r4941268 = r4941266 + r4941267;
        double r4941269 = tan(r4941268);
        double r4941270 = tan(r4941266);
        double r4941271 = r4941269 - r4941270;
        return r4941271;
}


double f_of(float x, float eps) {
        float r4941272 = eps;
        float r4941273 = -8.215474236625967e-36f;
        bool r4941274 = r4941272 <= r4941273;
        float r4941275 = x;
        float r4941276 = tan(r4941275);
        float r4941277 = tan(r4941272);
        float r4941278 = r4941276 + r4941277;
        float r4941279 = 1.0f;
        float r4941280 = sin(r4941272);
        float r4941281 = r4941276 * r4941280;
        float r4941282 = cos(r4941272);
        float r4941283 = r4941281 / r4941282;
        float r4941284 = r4941279 - r4941283;
        float r4941285 = r4941278 / r4941284;
        float r4941286 = r4941285 - r4941276;
        float r4941287 = 1.097745022759887e-20f;
        bool r4941288 = r4941272 <= r4941287;
        float r4941289 = 4.0f;
        float r4941290 = pow(r4941272, r4941289);
        float r4941291 = r4941275 * (r4941275 * r4941275);
        float r4941292 = r4941290 * r4941291;
        float r4941293 = r4941272 + r4941292;
        float r4941294 = r4941275 * r4941275;
        float r4941295 = r4941272 * (r4941272 * r4941272);
        float r4941296 = r4941294 * r4941295;
        float r4941297 = r4941293 + r4941296;
        float r4941298 = r4941288 ? r4941297 : r4941286;
        float r4941299 = r4941274 ? r4941286 : r4941298;
        return r4941299;
}

double f_od(double x, double eps) {
        double r4941300 = eps;
        double r4941301 = -8.215474236625967e-36;
        bool r4941302 = r4941300 <= r4941301;
        double r4941303 = x;
        double r4941304 = tan(r4941303);
        double r4941305 = tan(r4941300);
        double r4941306 = r4941304 + r4941305;
        double r4941307 = 1.0;
        double r4941308 = sin(r4941300);
        double r4941309 = r4941304 * r4941308;
        double r4941310 = cos(r4941300);
        double r4941311 = r4941309 / r4941310;
        double r4941312 = r4941307 - r4941311;
        double r4941313 = r4941306 / r4941312;
        double r4941314 = r4941313 - r4941304;
        double r4941315 = 1.097745022759887e-20;
        bool r4941316 = r4941300 <= r4941315;
        double r4941317 = 4.0;
        double r4941318 = pow(r4941300, r4941317);
        double r4941319 = r4941303 * (r4941303 * r4941303);
        double r4941320 = r4941318 * r4941319;
        double r4941321 = r4941300 + r4941320;
        double r4941322 = r4941303 * r4941303;
        double r4941323 = r4941300 * (r4941300 * r4941300);
        double r4941324 = r4941322 * r4941323;
        double r4941325 = r4941321 + r4941324;
        double r4941326 = r4941316 ? r4941325 : r4941314;
        double r4941327 = r4941302 ? r4941314 : r4941326;
        return r4941327;
}

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 r4941328, r4941329, r4941330, r4941331, r4941332, r4941333;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r4941328);
        mpfr_init(r4941329);
        mpfr_init(r4941330);
        mpfr_init(r4941331);
        mpfr_init(r4941332);
        mpfr_init(r4941333);
}

double f_im(double x, double eps) {
        mpfr_set_d(r4941328, x, MPFR_RNDN);
        mpfr_set_d(r4941329, eps, MPFR_RNDN);
        mpfr_add(r4941330, r4941328, r4941329, MPFR_RNDN);
        mpfr_tan(r4941331, r4941330, MPFR_RNDN);
        mpfr_tan(r4941332, r4941328, MPFR_RNDN);
        mpfr_sub(r4941333, r4941331, r4941332, MPFR_RNDN);
        return mpfr_get_d(r4941333, MPFR_RNDN);
}

static mpfr_t r4941334, r4941335, r4941336, r4941337, r4941338, r4941339, r4941340, r4941341, r4941342, r4941343, r4941344, r4941345, r4941346, r4941347, r4941348, r4941349, r4941350, r4941351, r4941352, r4941353, r4941354, r4941355, r4941356, r4941357, r4941358, r4941359, r4941360, r4941361;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r4941334);
        mpfr_init_set_str(r4941335, "-8.215474236625967e-36", 10, MPFR_RNDN);
        mpfr_init(r4941336);
        mpfr_init(r4941337);
        mpfr_init(r4941338);
        mpfr_init(r4941339);
        mpfr_init(r4941340);
        mpfr_init_set_str(r4941341, "1", 10, MPFR_RNDN);
        mpfr_init(r4941342);
        mpfr_init(r4941343);
        mpfr_init(r4941344);
        mpfr_init(r4941345);
        mpfr_init(r4941346);
        mpfr_init(r4941347);
        mpfr_init(r4941348);
        mpfr_init_set_str(r4941349, "1.097745022759887e-20", 10, MPFR_RNDN);
        mpfr_init(r4941350);
        mpfr_init_set_str(r4941351, "4", 10, MPFR_RNDN);
        mpfr_init(r4941352);
        mpfr_init(r4941353);
        mpfr_init(r4941354);
        mpfr_init(r4941355);
        mpfr_init(r4941356);
        mpfr_init(r4941357);
        mpfr_init(r4941358);
        mpfr_init(r4941359);
        mpfr_init(r4941360);
        mpfr_init(r4941361);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r4941334, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4941336, mpfr_cmp(r4941334, r4941335) <= 0, MPFR_RNDN);
        mpfr_set_d(r4941337, x, MPFR_RNDN);
        mpfr_tan(r4941338, r4941337, MPFR_RNDN);
        mpfr_tan(r4941339, r4941334, MPFR_RNDN);
        mpfr_add(r4941340, r4941338, r4941339, MPFR_RNDN);
        ;
        mpfr_sin(r4941342, r4941334, MPFR_RNDN);
        mpfr_mul(r4941343, r4941338, r4941342, MPFR_RNDN);
        mpfr_cos(r4941344, r4941334, MPFR_RNDN);
        mpfr_div(r4941345, r4941343, r4941344, MPFR_RNDN);
        mpfr_sub(r4941346, r4941341, r4941345, MPFR_RNDN);
        mpfr_div(r4941347, r4941340, r4941346, MPFR_RNDN);
        mpfr_sub(r4941348, r4941347, r4941338, MPFR_RNDN);
        ;
        mpfr_set_si(r4941350, mpfr_cmp(r4941334, r4941349) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r4941352, r4941334, r4941351, MPFR_RNDN);
        mpfr_mul(r4941353, r4941337, r4941337, MPFR_RNDN); mpfr_mul(r4941353, r4941353, r4941337, MPFR_RNDN);
        mpfr_mul(r4941354, r4941352, r4941353, MPFR_RNDN);
        mpfr_add(r4941355, r4941334, r4941354, MPFR_RNDN);
        mpfr_mul(r4941356, r4941337, r4941337, MPFR_RNDN);
        mpfr_mul(r4941357, r4941334, r4941334, MPFR_RNDN); mpfr_mul(r4941357, r4941357, r4941334, MPFR_RNDN);
        mpfr_mul(r4941358, r4941356, r4941357, MPFR_RNDN);
        mpfr_add(r4941359, r4941355, r4941358, MPFR_RNDN);
        if (mpfr_get_si(r4941350, MPFR_RNDN)) { mpfr_set(r4941360, r4941359, MPFR_RNDN); } else { mpfr_set(r4941360, r4941348, MPFR_RNDN); };
        if (mpfr_get_si(r4941336, MPFR_RNDN)) { mpfr_set(r4941361, r4941348, MPFR_RNDN); } else { mpfr_set(r4941361, r4941360, MPFR_RNDN); };
        return mpfr_get_d(r4941361, MPFR_RNDN);
}

static mpfr_t r4941362, r4941363, r4941364, r4941365, r4941366, r4941367, r4941368, r4941369, r4941370, r4941371, r4941372, r4941373, r4941374, r4941375, r4941376, r4941377, r4941378, r4941379, r4941380, r4941381, r4941382, r4941383, r4941384, r4941385, r4941386, r4941387, r4941388, r4941389;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r4941362);
        mpfr_init_set_str(r4941363, "-8.215474236625967e-36", 10, MPFR_RNDN);
        mpfr_init(r4941364);
        mpfr_init(r4941365);
        mpfr_init(r4941366);
        mpfr_init(r4941367);
        mpfr_init(r4941368);
        mpfr_init_set_str(r4941369, "1", 10, MPFR_RNDN);
        mpfr_init(r4941370);
        mpfr_init(r4941371);
        mpfr_init(r4941372);
        mpfr_init(r4941373);
        mpfr_init(r4941374);
        mpfr_init(r4941375);
        mpfr_init(r4941376);
        mpfr_init_set_str(r4941377, "1.097745022759887e-20", 10, MPFR_RNDN);
        mpfr_init(r4941378);
        mpfr_init_set_str(r4941379, "4", 10, MPFR_RNDN);
        mpfr_init(r4941380);
        mpfr_init(r4941381);
        mpfr_init(r4941382);
        mpfr_init(r4941383);
        mpfr_init(r4941384);
        mpfr_init(r4941385);
        mpfr_init(r4941386);
        mpfr_init(r4941387);
        mpfr_init(r4941388);
        mpfr_init(r4941389);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r4941362, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4941364, mpfr_cmp(r4941362, r4941363) <= 0, MPFR_RNDN);
        mpfr_set_d(r4941365, x, MPFR_RNDN);
        mpfr_tan(r4941366, r4941365, MPFR_RNDN);
        mpfr_tan(r4941367, r4941362, MPFR_RNDN);
        mpfr_add(r4941368, r4941366, r4941367, MPFR_RNDN);
        ;
        mpfr_sin(r4941370, r4941362, MPFR_RNDN);
        mpfr_mul(r4941371, r4941366, r4941370, MPFR_RNDN);
        mpfr_cos(r4941372, r4941362, MPFR_RNDN);
        mpfr_div(r4941373, r4941371, r4941372, MPFR_RNDN);
        mpfr_sub(r4941374, r4941369, r4941373, MPFR_RNDN);
        mpfr_div(r4941375, r4941368, r4941374, MPFR_RNDN);
        mpfr_sub(r4941376, r4941375, r4941366, MPFR_RNDN);
        ;
        mpfr_set_si(r4941378, mpfr_cmp(r4941362, r4941377) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r4941380, r4941362, r4941379, MPFR_RNDN);
        mpfr_mul(r4941381, r4941365, r4941365, MPFR_RNDN); mpfr_mul(r4941381, r4941381, r4941365, MPFR_RNDN);
        mpfr_mul(r4941382, r4941380, r4941381, MPFR_RNDN);
        mpfr_add(r4941383, r4941362, r4941382, MPFR_RNDN);
        mpfr_mul(r4941384, r4941365, r4941365, MPFR_RNDN);
        mpfr_mul(r4941385, r4941362, r4941362, MPFR_RNDN); mpfr_mul(r4941385, r4941385, r4941362, MPFR_RNDN);
        mpfr_mul(r4941386, r4941384, r4941385, MPFR_RNDN);
        mpfr_add(r4941387, r4941383, r4941386, MPFR_RNDN);
        if (mpfr_get_si(r4941378, MPFR_RNDN)) { mpfr_set(r4941388, r4941387, MPFR_RNDN); } else { mpfr_set(r4941388, r4941376, MPFR_RNDN); };
        if (mpfr_get_si(r4941364, MPFR_RNDN)) { mpfr_set(r4941389, r4941376, MPFR_RNDN); } else { mpfr_set(r4941389, r4941388, MPFR_RNDN); };
        return mpfr_get_d(r4941389, MPFR_RNDN);
}

