#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 r58489 = x;
        float r58490 = eps;
        float r58491 = r58489 + r58490;
        float r58492 = tan(r58491);
        float r58493 = tan(r58489);
        float r58494 = r58492 - r58493;
        return r58494;
}

double f_id(double x, double eps) {
        double r58495 = x;
        double r58496 = eps;
        double r58497 = r58495 + r58496;
        double r58498 = tan(r58497);
        double r58499 = tan(r58495);
        double r58500 = r58498 - r58499;
        return r58500;
}


double f_of(float x, float eps) {
        float r58501 = eps;
        float r58502 = -5.820154306538017e-17;
        bool r58503 = r58501 <= r58502;
        float r58504 = x;
        float r58505 = tan(r58504);
        float r58506 = tan(r58501);
        float r58507 = r58505 + r58506;
        float r58508 = 1;
        float r58509 = r58505 * r58506;
        float r58510 = r58508 - r58509;
        float r58511 = r58507 / r58510;
        float r58512 = r58511 * r58511;
        float r58513 = r58505 * r58505;
        float r58514 = r58512 - r58513;
        float r58515 = r58511 + r58505;
        float r58516 = r58514 / r58515;
        float r58517 = 1.9089152008804126e-17;
        bool r58518 = r58501 <= r58517;
        float r58519 = 3;
        float r58520 = pow(r58501, r58519);
        float r58521 = 2;
        float r58522 = pow(r58504, r58521);
        float r58523 = r58520 * r58522;
        float r58524 = pow(r58501, r58521);
        float r58525 = r58524 * r58504;
        float r58526 = r58523 + r58525;
        float r58527 = r58501 + r58526;
        float r58528 = cos(r58504);
        float r58529 = r58507 * r58528;
        float r58530 = sin(r58504);
        float r58531 = r58510 * r58530;
        float r58532 = r58529 - r58531;
        float r58533 = r58510 * r58528;
        float r58534 = r58532 / r58533;
        float r58535 = r58518 ? r58527 : r58534;
        float r58536 = r58503 ? r58516 : r58535;
        return r58536;
}

double f_od(double x, double eps) {
        double r58537 = eps;
        double r58538 = -5.820154306538017e-17;
        bool r58539 = r58537 <= r58538;
        double r58540 = x;
        double r58541 = tan(r58540);
        double r58542 = tan(r58537);
        double r58543 = r58541 + r58542;
        double r58544 = 1;
        double r58545 = r58541 * r58542;
        double r58546 = r58544 - r58545;
        double r58547 = r58543 / r58546;
        double r58548 = r58547 * r58547;
        double r58549 = r58541 * r58541;
        double r58550 = r58548 - r58549;
        double r58551 = r58547 + r58541;
        double r58552 = r58550 / r58551;
        double r58553 = 1.9089152008804126e-17;
        bool r58554 = r58537 <= r58553;
        double r58555 = 3;
        double r58556 = pow(r58537, r58555);
        double r58557 = 2;
        double r58558 = pow(r58540, r58557);
        double r58559 = r58556 * r58558;
        double r58560 = pow(r58537, r58557);
        double r58561 = r58560 * r58540;
        double r58562 = r58559 + r58561;
        double r58563 = r58537 + r58562;
        double r58564 = cos(r58540);
        double r58565 = r58543 * r58564;
        double r58566 = sin(r58540);
        double r58567 = r58546 * r58566;
        double r58568 = r58565 - r58567;
        double r58569 = r58546 * r58564;
        double r58570 = r58568 / r58569;
        double r58571 = r58554 ? r58563 : r58570;
        double r58572 = r58539 ? r58552 : r58571;
        return r58572;
}

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 r58573, r58574, r58575, r58576, r58577, r58578;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58573);
        mpfr_init(r58574);
        mpfr_init(r58575);
        mpfr_init(r58576);
        mpfr_init(r58577);
        mpfr_init(r58578);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58573, x, MPFR_RNDN);
        mpfr_set_d(r58574, eps, MPFR_RNDN);
        mpfr_add(r58575, r58573, r58574, MPFR_RNDN);
        mpfr_tan(r58576, r58575, MPFR_RNDN);
        mpfr_tan(r58577, r58573, MPFR_RNDN);
        mpfr_sub(r58578, r58576, r58577, MPFR_RNDN);
        return mpfr_get_d(r58578, MPFR_RNDN);
}

static mpfr_t r58579, r58580, r58581, r58582, r58583, r58584, r58585, r58586, r58587, r58588, r58589, r58590, r58591, r58592, r58593, r58594, r58595, r58596, r58597, r58598, r58599, r58600, r58601, r58602, r58603, r58604, r58605, r58606, r58607, r58608, r58609, r58610, r58611, r58612, r58613, r58614;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58579);
        mpfr_init_set_str(r58580, "-5.820154306538017e-17", 10, MPFR_RNDN);
        mpfr_init(r58581);
        mpfr_init(r58582);
        mpfr_init(r58583);
        mpfr_init(r58584);
        mpfr_init(r58585);
        mpfr_init_set_str(r58586, "1", 10, MPFR_RNDN);
        mpfr_init(r58587);
        mpfr_init(r58588);
        mpfr_init(r58589);
        mpfr_init(r58590);
        mpfr_init(r58591);
        mpfr_init(r58592);
        mpfr_init(r58593);
        mpfr_init(r58594);
        mpfr_init_set_str(r58595, "1.9089152008804126e-17", 10, MPFR_RNDN);
        mpfr_init(r58596);
        mpfr_init_set_str(r58597, "3", 10, MPFR_RNDN);
        mpfr_init(r58598);
        mpfr_init_set_str(r58599, "2", 10, MPFR_RNDN);
        mpfr_init(r58600);
        mpfr_init(r58601);
        mpfr_init(r58602);
        mpfr_init(r58603);
        mpfr_init(r58604);
        mpfr_init(r58605);
        mpfr_init(r58606);
        mpfr_init(r58607);
        mpfr_init(r58608);
        mpfr_init(r58609);
        mpfr_init(r58610);
        mpfr_init(r58611);
        mpfr_init(r58612);
        mpfr_init(r58613);
        mpfr_init(r58614);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58579, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58581, mpfr_cmp(r58579, r58580) <= 0, MPFR_RNDN);
        mpfr_set_d(r58582, x, MPFR_RNDN);
        mpfr_tan(r58583, r58582, MPFR_RNDN);
        mpfr_tan(r58584, r58579, MPFR_RNDN);
        mpfr_add(r58585, r58583, r58584, MPFR_RNDN);
        ;
        mpfr_mul(r58587, r58583, r58584, MPFR_RNDN);
        mpfr_sub(r58588, r58586, r58587, MPFR_RNDN);
        mpfr_div(r58589, r58585, r58588, MPFR_RNDN);
        mpfr_mul(r58590, r58589, r58589, MPFR_RNDN);
        mpfr_mul(r58591, r58583, r58583, MPFR_RNDN);
        mpfr_sub(r58592, r58590, r58591, MPFR_RNDN);
        mpfr_add(r58593, r58589, r58583, MPFR_RNDN);
        mpfr_div(r58594, r58592, r58593, MPFR_RNDN);
        ;
        mpfr_set_si(r58596, mpfr_cmp(r58579, r58595) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r58598, r58579, r58597, MPFR_RNDN);
        ;
        mpfr_pow(r58600, r58582, r58599, MPFR_RNDN);
        mpfr_mul(r58601, r58598, r58600, MPFR_RNDN);
        mpfr_pow(r58602, r58579, r58599, MPFR_RNDN);
        mpfr_mul(r58603, r58602, r58582, MPFR_RNDN);
        mpfr_add(r58604, r58601, r58603, MPFR_RNDN);
        mpfr_add(r58605, r58579, r58604, MPFR_RNDN);
        mpfr_cos(r58606, r58582, MPFR_RNDN);
        mpfr_mul(r58607, r58585, r58606, MPFR_RNDN);
        mpfr_sin(r58608, r58582, MPFR_RNDN);
        mpfr_mul(r58609, r58588, r58608, MPFR_RNDN);
        mpfr_sub(r58610, r58607, r58609, MPFR_RNDN);
        mpfr_mul(r58611, r58588, r58606, MPFR_RNDN);
        mpfr_div(r58612, r58610, r58611, MPFR_RNDN);
        if (mpfr_get_si(r58596, MPFR_RNDN)) { mpfr_set(r58613, r58605, MPFR_RNDN); } else { mpfr_set(r58613, r58612, MPFR_RNDN); };
        if (mpfr_get_si(r58581, MPFR_RNDN)) { mpfr_set(r58614, r58594, MPFR_RNDN); } else { mpfr_set(r58614, r58613, MPFR_RNDN); };
        return mpfr_get_d(r58614, MPFR_RNDN);
}

static mpfr_t r58615, r58616, r58617, r58618, r58619, r58620, r58621, r58622, r58623, r58624, r58625, r58626, r58627, r58628, r58629, r58630, r58631, r58632, r58633, r58634, r58635, r58636, r58637, r58638, r58639, r58640, r58641, r58642, r58643, r58644, r58645, r58646, r58647, r58648, r58649, r58650;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58615);
        mpfr_init_set_str(r58616, "-5.820154306538017e-17", 10, MPFR_RNDN);
        mpfr_init(r58617);
        mpfr_init(r58618);
        mpfr_init(r58619);
        mpfr_init(r58620);
        mpfr_init(r58621);
        mpfr_init_set_str(r58622, "1", 10, MPFR_RNDN);
        mpfr_init(r58623);
        mpfr_init(r58624);
        mpfr_init(r58625);
        mpfr_init(r58626);
        mpfr_init(r58627);
        mpfr_init(r58628);
        mpfr_init(r58629);
        mpfr_init(r58630);
        mpfr_init_set_str(r58631, "1.9089152008804126e-17", 10, MPFR_RNDN);
        mpfr_init(r58632);
        mpfr_init_set_str(r58633, "3", 10, MPFR_RNDN);
        mpfr_init(r58634);
        mpfr_init_set_str(r58635, "2", 10, MPFR_RNDN);
        mpfr_init(r58636);
        mpfr_init(r58637);
        mpfr_init(r58638);
        mpfr_init(r58639);
        mpfr_init(r58640);
        mpfr_init(r58641);
        mpfr_init(r58642);
        mpfr_init(r58643);
        mpfr_init(r58644);
        mpfr_init(r58645);
        mpfr_init(r58646);
        mpfr_init(r58647);
        mpfr_init(r58648);
        mpfr_init(r58649);
        mpfr_init(r58650);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r58615, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58617, mpfr_cmp(r58615, r58616) <= 0, MPFR_RNDN);
        mpfr_set_d(r58618, x, MPFR_RNDN);
        mpfr_tan(r58619, r58618, MPFR_RNDN);
        mpfr_tan(r58620, r58615, MPFR_RNDN);
        mpfr_add(r58621, r58619, r58620, MPFR_RNDN);
        ;
        mpfr_mul(r58623, r58619, r58620, MPFR_RNDN);
        mpfr_sub(r58624, r58622, r58623, MPFR_RNDN);
        mpfr_div(r58625, r58621, r58624, MPFR_RNDN);
        mpfr_mul(r58626, r58625, r58625, MPFR_RNDN);
        mpfr_mul(r58627, r58619, r58619, MPFR_RNDN);
        mpfr_sub(r58628, r58626, r58627, MPFR_RNDN);
        mpfr_add(r58629, r58625, r58619, MPFR_RNDN);
        mpfr_div(r58630, r58628, r58629, MPFR_RNDN);
        ;
        mpfr_set_si(r58632, mpfr_cmp(r58615, r58631) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r58634, r58615, r58633, MPFR_RNDN);
        ;
        mpfr_pow(r58636, r58618, r58635, MPFR_RNDN);
        mpfr_mul(r58637, r58634, r58636, MPFR_RNDN);
        mpfr_pow(r58638, r58615, r58635, MPFR_RNDN);
        mpfr_mul(r58639, r58638, r58618, MPFR_RNDN);
        mpfr_add(r58640, r58637, r58639, MPFR_RNDN);
        mpfr_add(r58641, r58615, r58640, MPFR_RNDN);
        mpfr_cos(r58642, r58618, MPFR_RNDN);
        mpfr_mul(r58643, r58621, r58642, MPFR_RNDN);
        mpfr_sin(r58644, r58618, MPFR_RNDN);
        mpfr_mul(r58645, r58624, r58644, MPFR_RNDN);
        mpfr_sub(r58646, r58643, r58645, MPFR_RNDN);
        mpfr_mul(r58647, r58624, r58642, MPFR_RNDN);
        mpfr_div(r58648, r58646, r58647, MPFR_RNDN);
        if (mpfr_get_si(r58632, MPFR_RNDN)) { mpfr_set(r58649, r58641, MPFR_RNDN); } else { mpfr_set(r58649, r58648, MPFR_RNDN); };
        if (mpfr_get_si(r58617, MPFR_RNDN)) { mpfr_set(r58650, r58630, MPFR_RNDN); } else { mpfr_set(r58650, r58649, MPFR_RNDN); };
        return mpfr_get_d(r58650, MPFR_RNDN);
}

