#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 r10502 = x;
        float r10503 = eps;
        float r10504 = r10502 + r10503;
        float r10505 = tan(r10504);
        float r10506 = tan(r10502);
        float r10507 = r10505 - r10506;
        return r10507;
}

double f_id(double x, double eps) {
        double r10508 = x;
        double r10509 = eps;
        double r10510 = r10508 + r10509;
        double r10511 = tan(r10510);
        double r10512 = tan(r10508);
        double r10513 = r10511 - r10512;
        return r10513;
}


double f_of(float x, float eps) {
        float r10514 = x;
        float r10515 = eps;
        float r10516 = r10514 * r10515;
        float r10517 = fma(r10516, r10515, r10515);
        float r10518 = fma(r10516, r10517, r10515);
        float r10519 = -1.059607752271381e-24f;
        bool r10520 = r10518 <= r10519;
        float r10521 = cos(r10514);
        float r10522 = tan(r10514);
        float r10523 = tan(r10515);
        float r10524 = r10522 + r10523;
        float r10525 = r10521 * r10524;
        float r10526 = sin(r10514);
        float r10527 = 1.0f;
        float r10528 = r10522 * r10523;
        float r10529 = r10527 - r10528;
        float r10530 = r10526 * r10529;
        float r10531 = r10525 - r10530;
        float r10532 = r10529 * r10521;
        float r10533 = r10531 / r10532;
        float r10534 = 1.5630001627745174e-31f;
        bool r10535 = r10518 <= r10534;
        float r10536 = fma(r10528, r10528, r10528);
        float r10537 = fma(r10536, r10524, r10524);
        float r10538 = 3.0f;
        float r10539 = pow(r10528, r10538);
        float r10540 = r10527 - r10539;
        float r10541 = r10537 / r10540;
        float r10542 = r10541 - r10522;
        float r10543 = r10535 ? r10518 : r10542;
        float r10544 = r10520 ? r10533 : r10543;
        return r10544;
}

double f_od(double x, double eps) {
        double r10545 = x;
        double r10546 = eps;
        double r10547 = r10545 * r10546;
        double r10548 = fma(r10547, r10546, r10546);
        double r10549 = fma(r10547, r10548, r10546);
        double r10550 = -1.059607752271381e-24;
        bool r10551 = r10549 <= r10550;
        double r10552 = cos(r10545);
        double r10553 = tan(r10545);
        double r10554 = tan(r10546);
        double r10555 = r10553 + r10554;
        double r10556 = r10552 * r10555;
        double r10557 = sin(r10545);
        double r10558 = 1.0;
        double r10559 = r10553 * r10554;
        double r10560 = r10558 - r10559;
        double r10561 = r10557 * r10560;
        double r10562 = r10556 - r10561;
        double r10563 = r10560 * r10552;
        double r10564 = r10562 / r10563;
        double r10565 = 1.5630001627745174e-31;
        bool r10566 = r10549 <= r10565;
        double r10567 = fma(r10559, r10559, r10559);
        double r10568 = fma(r10567, r10555, r10555);
        double r10569 = 3.0;
        double r10570 = pow(r10559, r10569);
        double r10571 = r10558 - r10570;
        double r10572 = r10568 / r10571;
        double r10573 = r10572 - r10553;
        double r10574 = r10566 ? r10549 : r10573;
        double r10575 = r10551 ? r10564 : r10574;
        return r10575;
}

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 r10576, r10577, r10578, r10579, r10580, r10581;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10576);
        mpfr_init(r10577);
        mpfr_init(r10578);
        mpfr_init(r10579);
        mpfr_init(r10580);
        mpfr_init(r10581);
}

double f_im(double x, double eps) {
        mpfr_set_d(r10576, x, MPFR_RNDN);
        mpfr_set_d(r10577, eps, MPFR_RNDN);
        mpfr_add(r10578, r10576, r10577, MPFR_RNDN);
        mpfr_tan(r10579, r10578, MPFR_RNDN);
        mpfr_tan(r10580, r10576, MPFR_RNDN);
        mpfr_sub(r10581, r10579, r10580, MPFR_RNDN);
        return mpfr_get_d(r10581, MPFR_RNDN);
}

static mpfr_t r10582, r10583, r10584, r10585, r10586, r10587, r10588, r10589, r10590, r10591, r10592, r10593, r10594, r10595, r10596, r10597, r10598, r10599, r10600, r10601, r10602, r10603, r10604, r10605, r10606, r10607, r10608, r10609, r10610, r10611, r10612;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10582);
        mpfr_init(r10583);
        mpfr_init(r10584);
        mpfr_init(r10585);
        mpfr_init(r10586);
        mpfr_init_set_str(r10587, "-1.059607752271381e-24", 10, MPFR_RNDN);
        mpfr_init(r10588);
        mpfr_init(r10589);
        mpfr_init(r10590);
        mpfr_init(r10591);
        mpfr_init(r10592);
        mpfr_init(r10593);
        mpfr_init(r10594);
        mpfr_init_set_str(r10595, "1", 10, MPFR_RNDN);
        mpfr_init(r10596);
        mpfr_init(r10597);
        mpfr_init(r10598);
        mpfr_init(r10599);
        mpfr_init(r10600);
        mpfr_init(r10601);
        mpfr_init_set_str(r10602, "1.5630001627745174e-31", 10, MPFR_RNDN);
        mpfr_init(r10603);
        mpfr_init(r10604);
        mpfr_init(r10605);
        mpfr_init_set_str(r10606, "3", 10, MPFR_RNDN);
        mpfr_init(r10607);
        mpfr_init(r10608);
        mpfr_init(r10609);
        mpfr_init(r10610);
        mpfr_init(r10611);
        mpfr_init(r10612);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r10582, x, MPFR_RNDN);
        mpfr_set_d(r10583, eps, MPFR_RNDN);
        mpfr_mul(r10584, r10582, r10583, MPFR_RNDN);
        mpfr_fma(r10585, r10584, r10583, r10583, MPFR_RNDN);
        mpfr_fma(r10586, r10584, r10585, r10583, MPFR_RNDN);
        ;
        mpfr_set_si(r10588, mpfr_cmp(r10586, r10587) <= 0, MPFR_RNDN);
        mpfr_cos(r10589, r10582, MPFR_RNDN);
        mpfr_tan(r10590, r10582, MPFR_RNDN);
        mpfr_tan(r10591, r10583, MPFR_RNDN);
        mpfr_add(r10592, r10590, r10591, MPFR_RNDN);
        mpfr_mul(r10593, r10589, r10592, MPFR_RNDN);
        mpfr_sin(r10594, r10582, MPFR_RNDN);
        ;
        mpfr_mul(r10596, r10590, r10591, MPFR_RNDN);
        mpfr_sub(r10597, r10595, r10596, MPFR_RNDN);
        mpfr_mul(r10598, r10594, r10597, MPFR_RNDN);
        mpfr_sub(r10599, r10593, r10598, MPFR_RNDN);
        mpfr_mul(r10600, r10597, r10589, MPFR_RNDN);
        mpfr_div(r10601, r10599, r10600, MPFR_RNDN);
        ;
        mpfr_set_si(r10603, mpfr_cmp(r10586, r10602) <= 0, MPFR_RNDN);
        mpfr_fma(r10604, r10596, r10596, r10596, MPFR_RNDN);
        mpfr_fma(r10605, r10604, r10592, r10592, MPFR_RNDN);
        ;
        mpfr_pow(r10607, r10596, r10606, MPFR_RNDN);
        mpfr_sub(r10608, r10595, r10607, MPFR_RNDN);
        mpfr_div(r10609, r10605, r10608, MPFR_RNDN);
        mpfr_sub(r10610, r10609, r10590, MPFR_RNDN);
        if (mpfr_get_si(r10603, MPFR_RNDN)) { mpfr_set(r10611, r10586, MPFR_RNDN); } else { mpfr_set(r10611, r10610, MPFR_RNDN); };
        if (mpfr_get_si(r10588, MPFR_RNDN)) { mpfr_set(r10612, r10601, MPFR_RNDN); } else { mpfr_set(r10612, r10611, MPFR_RNDN); };
        return mpfr_get_d(r10612, MPFR_RNDN);
}

static mpfr_t r10613, r10614, r10615, r10616, r10617, r10618, r10619, r10620, r10621, r10622, r10623, r10624, r10625, r10626, r10627, r10628, r10629, r10630, r10631, r10632, r10633, r10634, r10635, r10636, r10637, r10638, r10639, r10640, r10641, r10642, r10643;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10613);
        mpfr_init(r10614);
        mpfr_init(r10615);
        mpfr_init(r10616);
        mpfr_init(r10617);
        mpfr_init_set_str(r10618, "-1.059607752271381e-24", 10, MPFR_RNDN);
        mpfr_init(r10619);
        mpfr_init(r10620);
        mpfr_init(r10621);
        mpfr_init(r10622);
        mpfr_init(r10623);
        mpfr_init(r10624);
        mpfr_init(r10625);
        mpfr_init_set_str(r10626, "1", 10, MPFR_RNDN);
        mpfr_init(r10627);
        mpfr_init(r10628);
        mpfr_init(r10629);
        mpfr_init(r10630);
        mpfr_init(r10631);
        mpfr_init(r10632);
        mpfr_init_set_str(r10633, "1.5630001627745174e-31", 10, MPFR_RNDN);
        mpfr_init(r10634);
        mpfr_init(r10635);
        mpfr_init(r10636);
        mpfr_init_set_str(r10637, "3", 10, MPFR_RNDN);
        mpfr_init(r10638);
        mpfr_init(r10639);
        mpfr_init(r10640);
        mpfr_init(r10641);
        mpfr_init(r10642);
        mpfr_init(r10643);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r10613, x, MPFR_RNDN);
        mpfr_set_d(r10614, eps, MPFR_RNDN);
        mpfr_mul(r10615, r10613, r10614, MPFR_RNDN);
        mpfr_fma(r10616, r10615, r10614, r10614, MPFR_RNDN);
        mpfr_fma(r10617, r10615, r10616, r10614, MPFR_RNDN);
        ;
        mpfr_set_si(r10619, mpfr_cmp(r10617, r10618) <= 0, MPFR_RNDN);
        mpfr_cos(r10620, r10613, MPFR_RNDN);
        mpfr_tan(r10621, r10613, MPFR_RNDN);
        mpfr_tan(r10622, r10614, MPFR_RNDN);
        mpfr_add(r10623, r10621, r10622, MPFR_RNDN);
        mpfr_mul(r10624, r10620, r10623, MPFR_RNDN);
        mpfr_sin(r10625, r10613, MPFR_RNDN);
        ;
        mpfr_mul(r10627, r10621, r10622, MPFR_RNDN);
        mpfr_sub(r10628, r10626, r10627, MPFR_RNDN);
        mpfr_mul(r10629, r10625, r10628, MPFR_RNDN);
        mpfr_sub(r10630, r10624, r10629, MPFR_RNDN);
        mpfr_mul(r10631, r10628, r10620, MPFR_RNDN);
        mpfr_div(r10632, r10630, r10631, MPFR_RNDN);
        ;
        mpfr_set_si(r10634, mpfr_cmp(r10617, r10633) <= 0, MPFR_RNDN);
        mpfr_fma(r10635, r10627, r10627, r10627, MPFR_RNDN);
        mpfr_fma(r10636, r10635, r10623, r10623, MPFR_RNDN);
        ;
        mpfr_pow(r10638, r10627, r10637, MPFR_RNDN);
        mpfr_sub(r10639, r10626, r10638, MPFR_RNDN);
        mpfr_div(r10640, r10636, r10639, MPFR_RNDN);
        mpfr_sub(r10641, r10640, r10621, MPFR_RNDN);
        if (mpfr_get_si(r10634, MPFR_RNDN)) { mpfr_set(r10642, r10617, MPFR_RNDN); } else { mpfr_set(r10642, r10641, MPFR_RNDN); };
        if (mpfr_get_si(r10619, MPFR_RNDN)) { mpfr_set(r10643, r10632, MPFR_RNDN); } else { mpfr_set(r10643, r10642, MPFR_RNDN); };
        return mpfr_get_d(r10643, MPFR_RNDN);
}

