#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 r57464 = x;
        float r57465 = eps;
        float r57466 = r57464 + r57465;
        float r57467 = tan(r57466);
        float r57468 = tan(r57464);
        float r57469 = r57467 - r57468;
        return r57469;
}

double f_id(double x, double eps) {
        double r57470 = x;
        double r57471 = eps;
        double r57472 = r57470 + r57471;
        double r57473 = tan(r57472);
        double r57474 = tan(r57470);
        double r57475 = r57473 - r57474;
        return r57475;
}


double f_of(float x, float eps) {
        float r57476 = eps;
        float r57477 = -5.820154306538017e-17;
        bool r57478 = r57476 <= r57477;
        float r57479 = x;
        float r57480 = tan(r57479);
        float r57481 = tan(r57476);
        float r57482 = r57480 + r57481;
        float r57483 = 1;
        float r57484 = r57481 * r57480;
        float r57485 = 3;
        float r57486 = pow(r57484, r57485);
        float r57487 = cbrt(r57486);
        float r57488 = r57483 - r57487;
        float r57489 = r57482 / r57488;
        float r57490 = r57489 - r57480;
        float r57491 = 1.9089152008804126e-17;
        bool r57492 = r57476 <= r57491;
        float r57493 = pow(r57476, r57485);
        float r57494 = 2;
        float r57495 = pow(r57479, r57494);
        float r57496 = r57493 * r57495;
        float r57497 = pow(r57476, r57494);
        float r57498 = r57497 * r57479;
        float r57499 = r57496 + r57498;
        float r57500 = r57476 + r57499;
        float r57501 = r57492 ? r57500 : r57490;
        float r57502 = r57478 ? r57490 : r57501;
        return r57502;
}

double f_od(double x, double eps) {
        double r57503 = eps;
        double r57504 = -5.820154306538017e-17;
        bool r57505 = r57503 <= r57504;
        double r57506 = x;
        double r57507 = tan(r57506);
        double r57508 = tan(r57503);
        double r57509 = r57507 + r57508;
        double r57510 = 1;
        double r57511 = r57508 * r57507;
        double r57512 = 3;
        double r57513 = pow(r57511, r57512);
        double r57514 = cbrt(r57513);
        double r57515 = r57510 - r57514;
        double r57516 = r57509 / r57515;
        double r57517 = r57516 - r57507;
        double r57518 = 1.9089152008804126e-17;
        bool r57519 = r57503 <= r57518;
        double r57520 = pow(r57503, r57512);
        double r57521 = 2;
        double r57522 = pow(r57506, r57521);
        double r57523 = r57520 * r57522;
        double r57524 = pow(r57503, r57521);
        double r57525 = r57524 * r57506;
        double r57526 = r57523 + r57525;
        double r57527 = r57503 + r57526;
        double r57528 = r57519 ? r57527 : r57517;
        double r57529 = r57505 ? r57517 : r57528;
        return r57529;
}

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 r57530, r57531, r57532, r57533, r57534, r57535;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r57530);
        mpfr_init(r57531);
        mpfr_init(r57532);
        mpfr_init(r57533);
        mpfr_init(r57534);
        mpfr_init(r57535);
}

double f_im(double x, double eps) {
        mpfr_set_d(r57530, x, MPFR_RNDN);
        mpfr_set_d(r57531, eps, MPFR_RNDN);
        mpfr_add(r57532, r57530, r57531, MPFR_RNDN);
        mpfr_tan(r57533, r57532, MPFR_RNDN);
        mpfr_tan(r57534, r57530, MPFR_RNDN);
        mpfr_sub(r57535, r57533, r57534, MPFR_RNDN);
        return mpfr_get_d(r57535, MPFR_RNDN);
}

static mpfr_t r57536, r57537, r57538, r57539, r57540, r57541, r57542, r57543, r57544, r57545, r57546, r57547, r57548, r57549, r57550, r57551, r57552, r57553, r57554, r57555, r57556, r57557, r57558, r57559, r57560, r57561, r57562;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r57536);
        mpfr_init_set_str(r57537, "-5.820154306538017e-17", 10, MPFR_RNDN);
        mpfr_init(r57538);
        mpfr_init(r57539);
        mpfr_init(r57540);
        mpfr_init(r57541);
        mpfr_init(r57542);
        mpfr_init_set_str(r57543, "1", 10, MPFR_RNDN);
        mpfr_init(r57544);
        mpfr_init_set_str(r57545, "3", 10, MPFR_RNDN);
        mpfr_init(r57546);
        mpfr_init(r57547);
        mpfr_init(r57548);
        mpfr_init(r57549);
        mpfr_init(r57550);
        mpfr_init_set_str(r57551, "1.9089152008804126e-17", 10, MPFR_RNDN);
        mpfr_init(r57552);
        mpfr_init(r57553);
        mpfr_init_set_str(r57554, "2", 10, MPFR_RNDN);
        mpfr_init(r57555);
        mpfr_init(r57556);
        mpfr_init(r57557);
        mpfr_init(r57558);
        mpfr_init(r57559);
        mpfr_init(r57560);
        mpfr_init(r57561);
        mpfr_init(r57562);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r57536, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r57538, mpfr_cmp(r57536, r57537) <= 0, MPFR_RNDN);
        mpfr_set_d(r57539, x, MPFR_RNDN);
        mpfr_tan(r57540, r57539, MPFR_RNDN);
        mpfr_tan(r57541, r57536, MPFR_RNDN);
        mpfr_add(r57542, r57540, r57541, MPFR_RNDN);
        ;
        mpfr_mul(r57544, r57541, r57540, MPFR_RNDN);
        ;
        mpfr_pow(r57546, r57544, r57545, MPFR_RNDN);
        mpfr_cbrt(r57547, r57546, MPFR_RNDN);
        mpfr_sub(r57548, r57543, r57547, MPFR_RNDN);
        mpfr_div(r57549, r57542, r57548, MPFR_RNDN);
        mpfr_sub(r57550, r57549, r57540, MPFR_RNDN);
        ;
        mpfr_set_si(r57552, mpfr_cmp(r57536, r57551) <= 0, MPFR_RNDN);
        mpfr_pow(r57553, r57536, r57545, MPFR_RNDN);
        ;
        mpfr_pow(r57555, r57539, r57554, MPFR_RNDN);
        mpfr_mul(r57556, r57553, r57555, MPFR_RNDN);
        mpfr_pow(r57557, r57536, r57554, MPFR_RNDN);
        mpfr_mul(r57558, r57557, r57539, MPFR_RNDN);
        mpfr_add(r57559, r57556, r57558, MPFR_RNDN);
        mpfr_add(r57560, r57536, r57559, MPFR_RNDN);
        if (mpfr_get_si(r57552, MPFR_RNDN)) { mpfr_set(r57561, r57560, MPFR_RNDN); } else { mpfr_set(r57561, r57550, MPFR_RNDN); };
        if (mpfr_get_si(r57538, MPFR_RNDN)) { mpfr_set(r57562, r57550, MPFR_RNDN); } else { mpfr_set(r57562, r57561, MPFR_RNDN); };
        return mpfr_get_d(r57562, MPFR_RNDN);
}

static mpfr_t r57563, r57564, r57565, r57566, r57567, r57568, r57569, r57570, r57571, r57572, r57573, r57574, r57575, r57576, r57577, r57578, r57579, r57580, r57581, r57582, r57583, r57584, r57585, r57586, r57587, r57588, r57589;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r57563);
        mpfr_init_set_str(r57564, "-5.820154306538017e-17", 10, MPFR_RNDN);
        mpfr_init(r57565);
        mpfr_init(r57566);
        mpfr_init(r57567);
        mpfr_init(r57568);
        mpfr_init(r57569);
        mpfr_init_set_str(r57570, "1", 10, MPFR_RNDN);
        mpfr_init(r57571);
        mpfr_init_set_str(r57572, "3", 10, MPFR_RNDN);
        mpfr_init(r57573);
        mpfr_init(r57574);
        mpfr_init(r57575);
        mpfr_init(r57576);
        mpfr_init(r57577);
        mpfr_init_set_str(r57578, "1.9089152008804126e-17", 10, MPFR_RNDN);
        mpfr_init(r57579);
        mpfr_init(r57580);
        mpfr_init_set_str(r57581, "2", 10, MPFR_RNDN);
        mpfr_init(r57582);
        mpfr_init(r57583);
        mpfr_init(r57584);
        mpfr_init(r57585);
        mpfr_init(r57586);
        mpfr_init(r57587);
        mpfr_init(r57588);
        mpfr_init(r57589);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r57563, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r57565, mpfr_cmp(r57563, r57564) <= 0, MPFR_RNDN);
        mpfr_set_d(r57566, x, MPFR_RNDN);
        mpfr_tan(r57567, r57566, MPFR_RNDN);
        mpfr_tan(r57568, r57563, MPFR_RNDN);
        mpfr_add(r57569, r57567, r57568, MPFR_RNDN);
        ;
        mpfr_mul(r57571, r57568, r57567, MPFR_RNDN);
        ;
        mpfr_pow(r57573, r57571, r57572, MPFR_RNDN);
        mpfr_cbrt(r57574, r57573, MPFR_RNDN);
        mpfr_sub(r57575, r57570, r57574, MPFR_RNDN);
        mpfr_div(r57576, r57569, r57575, MPFR_RNDN);
        mpfr_sub(r57577, r57576, r57567, MPFR_RNDN);
        ;
        mpfr_set_si(r57579, mpfr_cmp(r57563, r57578) <= 0, MPFR_RNDN);
        mpfr_pow(r57580, r57563, r57572, MPFR_RNDN);
        ;
        mpfr_pow(r57582, r57566, r57581, MPFR_RNDN);
        mpfr_mul(r57583, r57580, r57582, MPFR_RNDN);
        mpfr_pow(r57584, r57563, r57581, MPFR_RNDN);
        mpfr_mul(r57585, r57584, r57566, MPFR_RNDN);
        mpfr_add(r57586, r57583, r57585, MPFR_RNDN);
        mpfr_add(r57587, r57563, r57586, MPFR_RNDN);
        if (mpfr_get_si(r57579, MPFR_RNDN)) { mpfr_set(r57588, r57587, MPFR_RNDN); } else { mpfr_set(r57588, r57577, MPFR_RNDN); };
        if (mpfr_get_si(r57565, MPFR_RNDN)) { mpfr_set(r57589, r57577, MPFR_RNDN); } else { mpfr_set(r57589, r57588, MPFR_RNDN); };
        return mpfr_get_d(r57589, MPFR_RNDN);
}

