#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 r10516 = x;
        float r10517 = eps;
        float r10518 = r10516 + r10517;
        float r10519 = tan(r10518);
        float r10520 = tan(r10516);
        float r10521 = r10519 - r10520;
        return r10521;
}

double f_id(double x, double eps) {
        double r10522 = x;
        double r10523 = eps;
        double r10524 = r10522 + r10523;
        double r10525 = tan(r10524);
        double r10526 = tan(r10522);
        double r10527 = r10525 - r10526;
        return r10527;
}


double f_of(float x, float eps) {
        float r10528 = x;
        float r10529 = tan(r10528);
        float r10530 = eps;
        float r10531 = tan(r10530);
        float r10532 = r10529 + r10531;
        float r10533 = cbrt(r10532);
        float r10534 = r10533 * r10533;
        float r10535 = 1.0f;
        float r10536 = r10531 * r10529;
        float r10537 = r10535 - r10536;
        float r10538 = r10533 / r10537;
        float r10539 = -r10529;
        float r10540 = fma(r10534, r10538, r10539);
        float r10541 = -2.3868355075214045e-15f;
        bool r10542 = r10540 <= r10541;
        float r10543 = 3.0f;
        float r10544 = pow(r10535, r10543);
        float r10545 = pow(r10536, r10543);
        float r10546 = r10544 - r10545;
        float r10547 = r10532 / r10546;
        float r10548 = fma(r10531, r10529, r10535);
        float r10549 = fma(r10536, r10536, r10548);
        float r10550 = r10547 * r10549;
        float r10551 = r10550 - r10529;
        float r10552 = 1.2946181514548095e-15f;
        bool r10553 = r10540 <= r10552;
        float r10554 = r10528 * r10530;
        float r10555 = fma(r10554, r10530, r10530);
        float r10556 = fma(r10554, r10555, r10530);
        float r10557 = r10536 * r10536;
        float r10558 = r10535 - r10557;
        float r10559 = r10532 / r10558;
        float r10560 = r10535 + r10536;
        float r10561 = fma(r10559, r10560, r10539);
        float r10562 = r10553 ? r10556 : r10561;
        float r10563 = r10542 ? r10551 : r10562;
        return r10563;
}

double f_od(double x, double eps) {
        double r10564 = x;
        double r10565 = tan(r10564);
        double r10566 = eps;
        double r10567 = tan(r10566);
        double r10568 = r10565 + r10567;
        double r10569 = cbrt(r10568);
        double r10570 = r10569 * r10569;
        double r10571 = 1.0;
        double r10572 = r10567 * r10565;
        double r10573 = r10571 - r10572;
        double r10574 = r10569 / r10573;
        double r10575 = -r10565;
        double r10576 = fma(r10570, r10574, r10575);
        double r10577 = -2.3868355075214045e-15;
        bool r10578 = r10576 <= r10577;
        double r10579 = 3.0;
        double r10580 = pow(r10571, r10579);
        double r10581 = pow(r10572, r10579);
        double r10582 = r10580 - r10581;
        double r10583 = r10568 / r10582;
        double r10584 = fma(r10567, r10565, r10571);
        double r10585 = fma(r10572, r10572, r10584);
        double r10586 = r10583 * r10585;
        double r10587 = r10586 - r10565;
        double r10588 = 1.2946181514548095e-15;
        bool r10589 = r10576 <= r10588;
        double r10590 = r10564 * r10566;
        double r10591 = fma(r10590, r10566, r10566);
        double r10592 = fma(r10590, r10591, r10566);
        double r10593 = r10572 * r10572;
        double r10594 = r10571 - r10593;
        double r10595 = r10568 / r10594;
        double r10596 = r10571 + r10572;
        double r10597 = fma(r10595, r10596, r10575);
        double r10598 = r10589 ? r10592 : r10597;
        double r10599 = r10578 ? r10587 : r10598;
        return r10599;
}

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 r10600, r10601, r10602, r10603, r10604, r10605;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10600);
        mpfr_init(r10601);
        mpfr_init(r10602);
        mpfr_init(r10603);
        mpfr_init(r10604);
        mpfr_init(r10605);
}

double f_im(double x, double eps) {
        mpfr_set_d(r10600, x, MPFR_RNDN);
        mpfr_set_d(r10601, eps, MPFR_RNDN);
        mpfr_add(r10602, r10600, r10601, MPFR_RNDN);
        mpfr_tan(r10603, r10602, MPFR_RNDN);
        mpfr_tan(r10604, r10600, MPFR_RNDN);
        mpfr_sub(r10605, r10603, r10604, MPFR_RNDN);
        return mpfr_get_d(r10605, MPFR_RNDN);
}

static mpfr_t r10606, r10607, r10608, r10609, r10610, r10611, r10612, 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;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10606);
        mpfr_init(r10607);
        mpfr_init(r10608);
        mpfr_init(r10609);
        mpfr_init(r10610);
        mpfr_init(r10611);
        mpfr_init(r10612);
        mpfr_init_set_str(r10613, "1", 10, MPFR_RNDN);
        mpfr_init(r10614);
        mpfr_init(r10615);
        mpfr_init(r10616);
        mpfr_init(r10617);
        mpfr_init(r10618);
        mpfr_init_set_str(r10619, "-2.3868355075214045e-15", 10, MPFR_RNDN);
        mpfr_init(r10620);
        mpfr_init_set_str(r10621, "3", 10, MPFR_RNDN);
        mpfr_init(r10622);
        mpfr_init(r10623);
        mpfr_init(r10624);
        mpfr_init(r10625);
        mpfr_init(r10626);
        mpfr_init(r10627);
        mpfr_init(r10628);
        mpfr_init(r10629);
        mpfr_init_set_str(r10630, "1.2946181514548095e-15", 10, MPFR_RNDN);
        mpfr_init(r10631);
        mpfr_init(r10632);
        mpfr_init(r10633);
        mpfr_init(r10634);
        mpfr_init(r10635);
        mpfr_init(r10636);
        mpfr_init(r10637);
        mpfr_init(r10638);
        mpfr_init(r10639);
        mpfr_init(r10640);
        mpfr_init(r10641);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r10606, x, MPFR_RNDN);
        mpfr_tan(r10607, r10606, MPFR_RNDN);
        mpfr_set_d(r10608, eps, MPFR_RNDN);
        mpfr_tan(r10609, r10608, MPFR_RNDN);
        mpfr_add(r10610, r10607, r10609, MPFR_RNDN);
        mpfr_cbrt(r10611, r10610, MPFR_RNDN);
        mpfr_mul(r10612, r10611, r10611, MPFR_RNDN);
        ;
        mpfr_mul(r10614, r10609, r10607, MPFR_RNDN);
        mpfr_sub(r10615, r10613, r10614, MPFR_RNDN);
        mpfr_div(r10616, r10611, r10615, MPFR_RNDN);
        mpfr_neg(r10617, r10607, MPFR_RNDN);
        mpfr_fma(r10618, r10612, r10616, r10617, MPFR_RNDN);
        ;
        mpfr_set_si(r10620, mpfr_cmp(r10618, r10619) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r10622, r10613, r10621, MPFR_RNDN);
        mpfr_pow(r10623, r10614, r10621, MPFR_RNDN);
        mpfr_sub(r10624, r10622, r10623, MPFR_RNDN);
        mpfr_div(r10625, r10610, r10624, MPFR_RNDN);
        mpfr_fma(r10626, r10609, r10607, r10613, MPFR_RNDN);
        mpfr_fma(r10627, r10614, r10614, r10626, MPFR_RNDN);
        mpfr_mul(r10628, r10625, r10627, MPFR_RNDN);
        mpfr_sub(r10629, r10628, r10607, MPFR_RNDN);
        ;
        mpfr_set_si(r10631, mpfr_cmp(r10618, r10630) <= 0, MPFR_RNDN);
        mpfr_mul(r10632, r10606, r10608, MPFR_RNDN);
        mpfr_fma(r10633, r10632, r10608, r10608, MPFR_RNDN);
        mpfr_fma(r10634, r10632, r10633, r10608, MPFR_RNDN);
        mpfr_mul(r10635, r10614, r10614, MPFR_RNDN);
        mpfr_sub(r10636, r10613, r10635, MPFR_RNDN);
        mpfr_div(r10637, r10610, r10636, MPFR_RNDN);
        mpfr_add(r10638, r10613, r10614, MPFR_RNDN);
        mpfr_fma(r10639, r10637, r10638, r10617, MPFR_RNDN);
        if (mpfr_get_si(r10631, MPFR_RNDN)) { mpfr_set(r10640, r10634, MPFR_RNDN); } else { mpfr_set(r10640, r10639, MPFR_RNDN); };
        if (mpfr_get_si(r10620, MPFR_RNDN)) { mpfr_set(r10641, r10629, MPFR_RNDN); } else { mpfr_set(r10641, r10640, MPFR_RNDN); };
        return mpfr_get_d(r10641, MPFR_RNDN);
}

static mpfr_t r10642, r10643, r10644, r10645, r10646, r10647, r10648, r10649, r10650, r10651, r10652, r10653, r10654, r10655, r10656, r10657, r10658, r10659, r10660, r10661, r10662, r10663, r10664, r10665, r10666, r10667, r10668, r10669, r10670, r10671, r10672, r10673, r10674, r10675, r10676, r10677;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10642);
        mpfr_init(r10643);
        mpfr_init(r10644);
        mpfr_init(r10645);
        mpfr_init(r10646);
        mpfr_init(r10647);
        mpfr_init(r10648);
        mpfr_init_set_str(r10649, "1", 10, MPFR_RNDN);
        mpfr_init(r10650);
        mpfr_init(r10651);
        mpfr_init(r10652);
        mpfr_init(r10653);
        mpfr_init(r10654);
        mpfr_init_set_str(r10655, "-2.3868355075214045e-15", 10, MPFR_RNDN);
        mpfr_init(r10656);
        mpfr_init_set_str(r10657, "3", 10, MPFR_RNDN);
        mpfr_init(r10658);
        mpfr_init(r10659);
        mpfr_init(r10660);
        mpfr_init(r10661);
        mpfr_init(r10662);
        mpfr_init(r10663);
        mpfr_init(r10664);
        mpfr_init(r10665);
        mpfr_init_set_str(r10666, "1.2946181514548095e-15", 10, MPFR_RNDN);
        mpfr_init(r10667);
        mpfr_init(r10668);
        mpfr_init(r10669);
        mpfr_init(r10670);
        mpfr_init(r10671);
        mpfr_init(r10672);
        mpfr_init(r10673);
        mpfr_init(r10674);
        mpfr_init(r10675);
        mpfr_init(r10676);
        mpfr_init(r10677);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r10642, x, MPFR_RNDN);
        mpfr_tan(r10643, r10642, MPFR_RNDN);
        mpfr_set_d(r10644, eps, MPFR_RNDN);
        mpfr_tan(r10645, r10644, MPFR_RNDN);
        mpfr_add(r10646, r10643, r10645, MPFR_RNDN);
        mpfr_cbrt(r10647, r10646, MPFR_RNDN);
        mpfr_mul(r10648, r10647, r10647, MPFR_RNDN);
        ;
        mpfr_mul(r10650, r10645, r10643, MPFR_RNDN);
        mpfr_sub(r10651, r10649, r10650, MPFR_RNDN);
        mpfr_div(r10652, r10647, r10651, MPFR_RNDN);
        mpfr_neg(r10653, r10643, MPFR_RNDN);
        mpfr_fma(r10654, r10648, r10652, r10653, MPFR_RNDN);
        ;
        mpfr_set_si(r10656, mpfr_cmp(r10654, r10655) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r10658, r10649, r10657, MPFR_RNDN);
        mpfr_pow(r10659, r10650, r10657, MPFR_RNDN);
        mpfr_sub(r10660, r10658, r10659, MPFR_RNDN);
        mpfr_div(r10661, r10646, r10660, MPFR_RNDN);
        mpfr_fma(r10662, r10645, r10643, r10649, MPFR_RNDN);
        mpfr_fma(r10663, r10650, r10650, r10662, MPFR_RNDN);
        mpfr_mul(r10664, r10661, r10663, MPFR_RNDN);
        mpfr_sub(r10665, r10664, r10643, MPFR_RNDN);
        ;
        mpfr_set_si(r10667, mpfr_cmp(r10654, r10666) <= 0, MPFR_RNDN);
        mpfr_mul(r10668, r10642, r10644, MPFR_RNDN);
        mpfr_fma(r10669, r10668, r10644, r10644, MPFR_RNDN);
        mpfr_fma(r10670, r10668, r10669, r10644, MPFR_RNDN);
        mpfr_mul(r10671, r10650, r10650, MPFR_RNDN);
        mpfr_sub(r10672, r10649, r10671, MPFR_RNDN);
        mpfr_div(r10673, r10646, r10672, MPFR_RNDN);
        mpfr_add(r10674, r10649, r10650, MPFR_RNDN);
        mpfr_fma(r10675, r10673, r10674, r10653, MPFR_RNDN);
        if (mpfr_get_si(r10667, MPFR_RNDN)) { mpfr_set(r10676, r10670, MPFR_RNDN); } else { mpfr_set(r10676, r10675, MPFR_RNDN); };
        if (mpfr_get_si(r10656, MPFR_RNDN)) { mpfr_set(r10677, r10665, MPFR_RNDN); } else { mpfr_set(r10677, r10676, MPFR_RNDN); };
        return mpfr_get_d(r10677, MPFR_RNDN);
}

