#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 r58601 = x;
        float r58602 = eps;
        float r58603 = r58601 + r58602;
        float r58604 = tan(r58603);
        float r58605 = tan(r58601);
        float r58606 = r58604 - r58605;
        return r58606;
}

double f_id(double x, double eps) {
        double r58607 = x;
        double r58608 = eps;
        double r58609 = r58607 + r58608;
        double r58610 = tan(r58609);
        double r58611 = tan(r58607);
        double r58612 = r58610 - r58611;
        return r58612;
}


double f_of(float x, float eps) {
        float r58613 = eps;
        float r58614 = -4.937900603750566e-17;
        bool r58615 = r58613 <= r58614;
        float r58616 = x;
        float r58617 = tan(r58616);
        float r58618 = tan(r58613);
        float r58619 = r58617 + r58618;
        float r58620 = 1;
        float r58621 = r58618 * r58617;
        float r58622 = 3;
        float r58623 = pow(r58621, r58622);
        float r58624 = cbrt(r58623);
        float r58625 = r58620 - r58624;
        float r58626 = r58619 / r58625;
        float r58627 = r58626 - r58617;
        float r58628 = 2.74084816432034e-15;
        bool r58629 = r58613 <= r58628;
        float r58630 = pow(r58613, r58622);
        float r58631 = 2;
        float r58632 = pow(r58616, r58631);
        float r58633 = r58630 * r58632;
        float r58634 = pow(r58613, r58631);
        float r58635 = r58634 * r58616;
        float r58636 = r58633 + r58635;
        float r58637 = r58613 + r58636;
        float r58638 = r58629 ? r58637 : r58627;
        float r58639 = r58615 ? r58627 : r58638;
        return r58639;
}

double f_od(double x, double eps) {
        double r58640 = eps;
        double r58641 = -4.937900603750566e-17;
        bool r58642 = r58640 <= r58641;
        double r58643 = x;
        double r58644 = tan(r58643);
        double r58645 = tan(r58640);
        double r58646 = r58644 + r58645;
        double r58647 = 1;
        double r58648 = r58645 * r58644;
        double r58649 = 3;
        double r58650 = pow(r58648, r58649);
        double r58651 = cbrt(r58650);
        double r58652 = r58647 - r58651;
        double r58653 = r58646 / r58652;
        double r58654 = r58653 - r58644;
        double r58655 = 2.74084816432034e-15;
        bool r58656 = r58640 <= r58655;
        double r58657 = pow(r58640, r58649);
        double r58658 = 2;
        double r58659 = pow(r58643, r58658);
        double r58660 = r58657 * r58659;
        double r58661 = pow(r58640, r58658);
        double r58662 = r58661 * r58643;
        double r58663 = r58660 + r58662;
        double r58664 = r58640 + r58663;
        double r58665 = r58656 ? r58664 : r58654;
        double r58666 = r58642 ? r58654 : r58665;
        return r58666;
}

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 r58667, r58668, r58669, r58670, r58671, r58672;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58667);
        mpfr_init(r58668);
        mpfr_init(r58669);
        mpfr_init(r58670);
        mpfr_init(r58671);
        mpfr_init(r58672);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58667, x, MPFR_RNDN);
        mpfr_set_d(r58668, eps, MPFR_RNDN);
        mpfr_add(r58669, r58667, r58668, MPFR_RNDN);
        mpfr_tan(r58670, r58669, MPFR_RNDN);
        mpfr_tan(r58671, r58667, MPFR_RNDN);
        mpfr_sub(r58672, r58670, r58671, MPFR_RNDN);
        return mpfr_get_d(r58672, MPFR_RNDN);
}

static mpfr_t r58673, r58674, r58675, r58676, r58677, r58678, r58679, r58680, r58681, r58682, r58683, r58684, r58685, r58686, r58687, r58688, r58689, r58690, r58691, r58692, r58693, r58694, r58695, r58696, r58697, r58698, r58699;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58673);
        mpfr_init_set_str(r58674, "-4.937900603750566e-17", 10, MPFR_RNDN);
        mpfr_init(r58675);
        mpfr_init(r58676);
        mpfr_init(r58677);
        mpfr_init(r58678);
        mpfr_init(r58679);
        mpfr_init_set_str(r58680, "1", 10, MPFR_RNDN);
        mpfr_init(r58681);
        mpfr_init_set_str(r58682, "3", 10, MPFR_RNDN);
        mpfr_init(r58683);
        mpfr_init(r58684);
        mpfr_init(r58685);
        mpfr_init(r58686);
        mpfr_init(r58687);
        mpfr_init_set_str(r58688, "2.74084816432034e-15", 10, MPFR_RNDN);
        mpfr_init(r58689);
        mpfr_init(r58690);
        mpfr_init_set_str(r58691, "2", 10, MPFR_RNDN);
        mpfr_init(r58692);
        mpfr_init(r58693);
        mpfr_init(r58694);
        mpfr_init(r58695);
        mpfr_init(r58696);
        mpfr_init(r58697);
        mpfr_init(r58698);
        mpfr_init(r58699);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58673, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58675, mpfr_cmp(r58673, r58674) <= 0, MPFR_RNDN);
        mpfr_set_d(r58676, x, MPFR_RNDN);
        mpfr_tan(r58677, r58676, MPFR_RNDN);
        mpfr_tan(r58678, r58673, MPFR_RNDN);
        mpfr_add(r58679, r58677, r58678, MPFR_RNDN);
        ;
        mpfr_mul(r58681, r58678, r58677, MPFR_RNDN);
        ;
        mpfr_pow(r58683, r58681, r58682, MPFR_RNDN);
        mpfr_cbrt(r58684, r58683, MPFR_RNDN);
        mpfr_sub(r58685, r58680, r58684, MPFR_RNDN);
        mpfr_div(r58686, r58679, r58685, MPFR_RNDN);
        mpfr_sub(r58687, r58686, r58677, MPFR_RNDN);
        ;
        mpfr_set_si(r58689, mpfr_cmp(r58673, r58688) <= 0, MPFR_RNDN);
        mpfr_pow(r58690, r58673, r58682, MPFR_RNDN);
        ;
        mpfr_pow(r58692, r58676, r58691, MPFR_RNDN);
        mpfr_mul(r58693, r58690, r58692, MPFR_RNDN);
        mpfr_pow(r58694, r58673, r58691, MPFR_RNDN);
        mpfr_mul(r58695, r58694, r58676, MPFR_RNDN);
        mpfr_add(r58696, r58693, r58695, MPFR_RNDN);
        mpfr_add(r58697, r58673, r58696, MPFR_RNDN);
        if (mpfr_get_si(r58689, MPFR_RNDN)) { mpfr_set(r58698, r58697, MPFR_RNDN); } else { mpfr_set(r58698, r58687, MPFR_RNDN); };
        if (mpfr_get_si(r58675, MPFR_RNDN)) { mpfr_set(r58699, r58687, MPFR_RNDN); } else { mpfr_set(r58699, r58698, MPFR_RNDN); };
        return mpfr_get_d(r58699, MPFR_RNDN);
}

static mpfr_t r58700, r58701, r58702, r58703, r58704, r58705, r58706, r58707, r58708, r58709, r58710, r58711, r58712, r58713, r58714, r58715, r58716, r58717, r58718, r58719, r58720, r58721, r58722, r58723, r58724, r58725, r58726;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58700);
        mpfr_init_set_str(r58701, "-4.937900603750566e-17", 10, MPFR_RNDN);
        mpfr_init(r58702);
        mpfr_init(r58703);
        mpfr_init(r58704);
        mpfr_init(r58705);
        mpfr_init(r58706);
        mpfr_init_set_str(r58707, "1", 10, MPFR_RNDN);
        mpfr_init(r58708);
        mpfr_init_set_str(r58709, "3", 10, MPFR_RNDN);
        mpfr_init(r58710);
        mpfr_init(r58711);
        mpfr_init(r58712);
        mpfr_init(r58713);
        mpfr_init(r58714);
        mpfr_init_set_str(r58715, "2.74084816432034e-15", 10, MPFR_RNDN);
        mpfr_init(r58716);
        mpfr_init(r58717);
        mpfr_init_set_str(r58718, "2", 10, MPFR_RNDN);
        mpfr_init(r58719);
        mpfr_init(r58720);
        mpfr_init(r58721);
        mpfr_init(r58722);
        mpfr_init(r58723);
        mpfr_init(r58724);
        mpfr_init(r58725);
        mpfr_init(r58726);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r58700, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58702, mpfr_cmp(r58700, r58701) <= 0, MPFR_RNDN);
        mpfr_set_d(r58703, x, MPFR_RNDN);
        mpfr_tan(r58704, r58703, MPFR_RNDN);
        mpfr_tan(r58705, r58700, MPFR_RNDN);
        mpfr_add(r58706, r58704, r58705, MPFR_RNDN);
        ;
        mpfr_mul(r58708, r58705, r58704, MPFR_RNDN);
        ;
        mpfr_pow(r58710, r58708, r58709, MPFR_RNDN);
        mpfr_cbrt(r58711, r58710, MPFR_RNDN);
        mpfr_sub(r58712, r58707, r58711, MPFR_RNDN);
        mpfr_div(r58713, r58706, r58712, MPFR_RNDN);
        mpfr_sub(r58714, r58713, r58704, MPFR_RNDN);
        ;
        mpfr_set_si(r58716, mpfr_cmp(r58700, r58715) <= 0, MPFR_RNDN);
        mpfr_pow(r58717, r58700, r58709, MPFR_RNDN);
        ;
        mpfr_pow(r58719, r58703, r58718, MPFR_RNDN);
        mpfr_mul(r58720, r58717, r58719, MPFR_RNDN);
        mpfr_pow(r58721, r58700, r58718, MPFR_RNDN);
        mpfr_mul(r58722, r58721, r58703, MPFR_RNDN);
        mpfr_add(r58723, r58720, r58722, MPFR_RNDN);
        mpfr_add(r58724, r58700, r58723, MPFR_RNDN);
        if (mpfr_get_si(r58716, MPFR_RNDN)) { mpfr_set(r58725, r58724, MPFR_RNDN); } else { mpfr_set(r58725, r58714, MPFR_RNDN); };
        if (mpfr_get_si(r58702, MPFR_RNDN)) { mpfr_set(r58726, r58714, MPFR_RNDN); } else { mpfr_set(r58726, r58725, MPFR_RNDN); };
        return mpfr_get_d(r58726, MPFR_RNDN);
}

