#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 r20479 = x;
        float r20480 = eps;
        float r20481 = r20479 + r20480;
        float r20482 = tan(r20481);
        float r20483 = tan(r20479);
        float r20484 = r20482 - r20483;
        return r20484;
}

double f_id(double x, double eps) {
        double r20485 = x;
        double r20486 = eps;
        double r20487 = r20485 + r20486;
        double r20488 = tan(r20487);
        double r20489 = tan(r20485);
        double r20490 = r20488 - r20489;
        return r20490;
}


double f_of(float x, float eps) {
        float r20491 = eps;
        float r20492 = -2.039466890273891e-98f;
        bool r20493 = r20491 <= r20492;
        float r20494 = x;
        float r20495 = tan(r20494);
        float r20496 = tan(r20491);
        float r20497 = r20495 + r20496;
        float r20498 = cos(r20494);
        float r20499 = r20497 * r20498;
        float r20500 = 1.0f;
        float r20501 = r20495 * r20496;
        float r20502 = r20500 - r20501;
        float r20503 = sin(r20494);
        float r20504 = r20502 * r20503;
        float r20505 = r20499 - r20504;
        float r20506 = r20502 * r20498;
        float r20507 = r20505 / r20506;
        float r20508 = 1.4655504637498985e-16f;
        bool r20509 = r20491 <= r20508;
        float r20510 = r20494 * r20494;
        float r20511 = r20491 * (r20491 * r20491);
        float r20512 = r20510 * r20511;
        float r20513 = 4.0f;
        float r20514 = pow(r20491, r20513);
        float r20515 = r20494 * (r20494 * r20494);
        float r20516 = r20514 * r20515;
        float r20517 = r20512 + r20516;
        float r20518 = r20517 + r20491;
        float r20519 = sin(r20491);
        float r20520 = r20503 * r20519;
        float r20521 = cos(r20491);
        float r20522 = r20498 * r20521;
        float r20523 = r20520 / r20522;
        float r20524 = r20500 - r20523;
        float r20525 = r20497 / r20524;
        float r20526 = r20525 - r20495;
        float r20527 = r20509 ? r20518 : r20526;
        float r20528 = r20493 ? r20507 : r20527;
        return r20528;
}

double f_od(double x, double eps) {
        double r20529 = eps;
        double r20530 = -2.039466890273891e-98;
        bool r20531 = r20529 <= r20530;
        double r20532 = x;
        double r20533 = tan(r20532);
        double r20534 = tan(r20529);
        double r20535 = r20533 + r20534;
        double r20536 = cos(r20532);
        double r20537 = r20535 * r20536;
        double r20538 = 1.0;
        double r20539 = r20533 * r20534;
        double r20540 = r20538 - r20539;
        double r20541 = sin(r20532);
        double r20542 = r20540 * r20541;
        double r20543 = r20537 - r20542;
        double r20544 = r20540 * r20536;
        double r20545 = r20543 / r20544;
        double r20546 = 1.4655504637498985e-16;
        bool r20547 = r20529 <= r20546;
        double r20548 = r20532 * r20532;
        double r20549 = r20529 * (r20529 * r20529);
        double r20550 = r20548 * r20549;
        double r20551 = 4.0;
        double r20552 = pow(r20529, r20551);
        double r20553 = r20532 * (r20532 * r20532);
        double r20554 = r20552 * r20553;
        double r20555 = r20550 + r20554;
        double r20556 = r20555 + r20529;
        double r20557 = sin(r20529);
        double r20558 = r20541 * r20557;
        double r20559 = cos(r20529);
        double r20560 = r20536 * r20559;
        double r20561 = r20558 / r20560;
        double r20562 = r20538 - r20561;
        double r20563 = r20535 / r20562;
        double r20564 = r20563 - r20533;
        double r20565 = r20547 ? r20556 : r20564;
        double r20566 = r20531 ? r20545 : r20565;
        return r20566;
}

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 r20567, r20568, r20569, r20570, r20571, r20572;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r20567);
        mpfr_init(r20568);
        mpfr_init(r20569);
        mpfr_init(r20570);
        mpfr_init(r20571);
        mpfr_init(r20572);
}

double f_im(double x, double eps) {
        mpfr_set_d(r20567, x, MPFR_RNDN);
        mpfr_set_d(r20568, eps, MPFR_RNDN);
        mpfr_add(r20569, r20567, r20568, MPFR_RNDN);
        mpfr_tan(r20570, r20569, MPFR_RNDN);
        mpfr_tan(r20571, r20567, MPFR_RNDN);
        mpfr_sub(r20572, r20570, r20571, MPFR_RNDN);
        return mpfr_get_d(r20572, MPFR_RNDN);
}

static mpfr_t r20573, r20574, r20575, r20576, r20577, r20578, r20579, r20580, r20581, r20582, r20583, r20584, r20585, r20586, r20587, r20588, r20589, r20590, r20591, r20592, r20593, r20594, r20595, r20596, r20597, r20598, r20599, r20600, r20601, r20602, r20603, r20604, r20605, r20606, r20607, r20608, r20609, r20610;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r20573);
        mpfr_init_set_str(r20574, "-2.039466890273891e-98", 10, MPFR_RNDN);
        mpfr_init(r20575);
        mpfr_init(r20576);
        mpfr_init(r20577);
        mpfr_init(r20578);
        mpfr_init(r20579);
        mpfr_init(r20580);
        mpfr_init(r20581);
        mpfr_init_set_str(r20582, "1", 10, MPFR_RNDN);
        mpfr_init(r20583);
        mpfr_init(r20584);
        mpfr_init(r20585);
        mpfr_init(r20586);
        mpfr_init(r20587);
        mpfr_init(r20588);
        mpfr_init(r20589);
        mpfr_init_set_str(r20590, "1.4655504637498985e-16", 10, MPFR_RNDN);
        mpfr_init(r20591);
        mpfr_init(r20592);
        mpfr_init(r20593);
        mpfr_init(r20594);
        mpfr_init_set_str(r20595, "4", 10, MPFR_RNDN);
        mpfr_init(r20596);
        mpfr_init(r20597);
        mpfr_init(r20598);
        mpfr_init(r20599);
        mpfr_init(r20600);
        mpfr_init(r20601);
        mpfr_init(r20602);
        mpfr_init(r20603);
        mpfr_init(r20604);
        mpfr_init(r20605);
        mpfr_init(r20606);
        mpfr_init(r20607);
        mpfr_init(r20608);
        mpfr_init(r20609);
        mpfr_init(r20610);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r20573, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r20575, mpfr_cmp(r20573, r20574) <= 0, MPFR_RNDN);
        mpfr_set_d(r20576, x, MPFR_RNDN);
        mpfr_tan(r20577, r20576, MPFR_RNDN);
        mpfr_tan(r20578, r20573, MPFR_RNDN);
        mpfr_add(r20579, r20577, r20578, MPFR_RNDN);
        mpfr_cos(r20580, r20576, MPFR_RNDN);
        mpfr_mul(r20581, r20579, r20580, MPFR_RNDN);
        ;
        mpfr_mul(r20583, r20577, r20578, MPFR_RNDN);
        mpfr_sub(r20584, r20582, r20583, MPFR_RNDN);
        mpfr_sin(r20585, r20576, MPFR_RNDN);
        mpfr_mul(r20586, r20584, r20585, MPFR_RNDN);
        mpfr_sub(r20587, r20581, r20586, MPFR_RNDN);
        mpfr_mul(r20588, r20584, r20580, MPFR_RNDN);
        mpfr_div(r20589, r20587, r20588, MPFR_RNDN);
        ;
        mpfr_set_si(r20591, mpfr_cmp(r20573, r20590) <= 0, MPFR_RNDN);
        mpfr_sqr(r20592, r20576, MPFR_RNDN);
        mpfr_mul(r20593, r20573, r20573, MPFR_RNDN); mpfr_mul(r20593, r20593, r20573, MPFR_RNDN);
        mpfr_mul(r20594, r20592, r20593, MPFR_RNDN);
        ;
        mpfr_pow(r20596, r20573, r20595, MPFR_RNDN);
        mpfr_mul(r20597, r20576, r20576, MPFR_RNDN); mpfr_mul(r20597, r20597, r20576, MPFR_RNDN);
        mpfr_mul(r20598, r20596, r20597, MPFR_RNDN);
        mpfr_add(r20599, r20594, r20598, MPFR_RNDN);
        mpfr_add(r20600, r20599, r20573, MPFR_RNDN);
        mpfr_sin(r20601, r20573, MPFR_RNDN);
        mpfr_mul(r20602, r20585, r20601, MPFR_RNDN);
        mpfr_cos(r20603, r20573, MPFR_RNDN);
        mpfr_mul(r20604, r20580, r20603, MPFR_RNDN);
        mpfr_div(r20605, r20602, r20604, MPFR_RNDN);
        mpfr_sub(r20606, r20582, r20605, MPFR_RNDN);
        mpfr_div(r20607, r20579, r20606, MPFR_RNDN);
        mpfr_sub(r20608, r20607, r20577, MPFR_RNDN);
        if (mpfr_get_si(r20591, MPFR_RNDN)) { mpfr_set(r20609, r20600, MPFR_RNDN); } else { mpfr_set(r20609, r20608, MPFR_RNDN); };
        if (mpfr_get_si(r20575, MPFR_RNDN)) { mpfr_set(r20610, r20589, MPFR_RNDN); } else { mpfr_set(r20610, r20609, MPFR_RNDN); };
        return mpfr_get_d(r20610, MPFR_RNDN);
}

static mpfr_t r20611, r20612, r20613, r20614, r20615, r20616, r20617, r20618, r20619, r20620, r20621, r20622, r20623, r20624, r20625, r20626, r20627, r20628, r20629, r20630, r20631, r20632, r20633, r20634, r20635, r20636, r20637, r20638, r20639, r20640, r20641, r20642, r20643, r20644, r20645, r20646, r20647, r20648;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r20611);
        mpfr_init_set_str(r20612, "-2.039466890273891e-98", 10, MPFR_RNDN);
        mpfr_init(r20613);
        mpfr_init(r20614);
        mpfr_init(r20615);
        mpfr_init(r20616);
        mpfr_init(r20617);
        mpfr_init(r20618);
        mpfr_init(r20619);
        mpfr_init_set_str(r20620, "1", 10, MPFR_RNDN);
        mpfr_init(r20621);
        mpfr_init(r20622);
        mpfr_init(r20623);
        mpfr_init(r20624);
        mpfr_init(r20625);
        mpfr_init(r20626);
        mpfr_init(r20627);
        mpfr_init_set_str(r20628, "1.4655504637498985e-16", 10, MPFR_RNDN);
        mpfr_init(r20629);
        mpfr_init(r20630);
        mpfr_init(r20631);
        mpfr_init(r20632);
        mpfr_init_set_str(r20633, "4", 10, MPFR_RNDN);
        mpfr_init(r20634);
        mpfr_init(r20635);
        mpfr_init(r20636);
        mpfr_init(r20637);
        mpfr_init(r20638);
        mpfr_init(r20639);
        mpfr_init(r20640);
        mpfr_init(r20641);
        mpfr_init(r20642);
        mpfr_init(r20643);
        mpfr_init(r20644);
        mpfr_init(r20645);
        mpfr_init(r20646);
        mpfr_init(r20647);
        mpfr_init(r20648);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r20611, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r20613, mpfr_cmp(r20611, r20612) <= 0, MPFR_RNDN);
        mpfr_set_d(r20614, x, MPFR_RNDN);
        mpfr_tan(r20615, r20614, MPFR_RNDN);
        mpfr_tan(r20616, r20611, MPFR_RNDN);
        mpfr_add(r20617, r20615, r20616, MPFR_RNDN);
        mpfr_cos(r20618, r20614, MPFR_RNDN);
        mpfr_mul(r20619, r20617, r20618, MPFR_RNDN);
        ;
        mpfr_mul(r20621, r20615, r20616, MPFR_RNDN);
        mpfr_sub(r20622, r20620, r20621, MPFR_RNDN);
        mpfr_sin(r20623, r20614, MPFR_RNDN);
        mpfr_mul(r20624, r20622, r20623, MPFR_RNDN);
        mpfr_sub(r20625, r20619, r20624, MPFR_RNDN);
        mpfr_mul(r20626, r20622, r20618, MPFR_RNDN);
        mpfr_div(r20627, r20625, r20626, MPFR_RNDN);
        ;
        mpfr_set_si(r20629, mpfr_cmp(r20611, r20628) <= 0, MPFR_RNDN);
        mpfr_sqr(r20630, r20614, MPFR_RNDN);
        mpfr_mul(r20631, r20611, r20611, MPFR_RNDN); mpfr_mul(r20631, r20631, r20611, MPFR_RNDN);
        mpfr_mul(r20632, r20630, r20631, MPFR_RNDN);
        ;
        mpfr_pow(r20634, r20611, r20633, MPFR_RNDN);
        mpfr_mul(r20635, r20614, r20614, MPFR_RNDN); mpfr_mul(r20635, r20635, r20614, MPFR_RNDN);
        mpfr_mul(r20636, r20634, r20635, MPFR_RNDN);
        mpfr_add(r20637, r20632, r20636, MPFR_RNDN);
        mpfr_add(r20638, r20637, r20611, MPFR_RNDN);
        mpfr_sin(r20639, r20611, MPFR_RNDN);
        mpfr_mul(r20640, r20623, r20639, MPFR_RNDN);
        mpfr_cos(r20641, r20611, MPFR_RNDN);
        mpfr_mul(r20642, r20618, r20641, MPFR_RNDN);
        mpfr_div(r20643, r20640, r20642, MPFR_RNDN);
        mpfr_sub(r20644, r20620, r20643, MPFR_RNDN);
        mpfr_div(r20645, r20617, r20644, MPFR_RNDN);
        mpfr_sub(r20646, r20645, r20615, MPFR_RNDN);
        if (mpfr_get_si(r20629, MPFR_RNDN)) { mpfr_set(r20647, r20638, MPFR_RNDN); } else { mpfr_set(r20647, r20646, MPFR_RNDN); };
        if (mpfr_get_si(r20613, MPFR_RNDN)) { mpfr_set(r20648, r20627, MPFR_RNDN); } else { mpfr_set(r20648, r20647, MPFR_RNDN); };
        return mpfr_get_d(r20648, MPFR_RNDN);
}

