#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 r58633 = x;
        float r58634 = eps;
        float r58635 = r58633 + r58634;
        float r58636 = tan(r58635);
        float r58637 = tan(r58633);
        float r58638 = r58636 - r58637;
        return r58638;
}

double f_id(double x, double eps) {
        double r58639 = x;
        double r58640 = eps;
        double r58641 = r58639 + r58640;
        double r58642 = tan(r58641);
        double r58643 = tan(r58639);
        double r58644 = r58642 - r58643;
        return r58644;
}


double f_of(float x, float eps) {
        float r58645 = eps;
        float r58646 = -5.820154306538017e-17;
        bool r58647 = r58645 <= r58646;
        float r58648 = x;
        float r58649 = tan(r58648);
        float r58650 = tan(r58645);
        float r58651 = r58649 + r58650;
        float r58652 = 1;
        float r58653 = r58649 * r58650;
        float r58654 = r58652 - r58653;
        float r58655 = r58651 / r58654;
        float r58656 = r58655 * r58655;
        float r58657 = r58649 * r58649;
        float r58658 = r58656 - r58657;
        float r58659 = r58655 + r58649;
        float r58660 = r58658 / r58659;
        float r58661 = 1.9089152008804126e-17;
        bool r58662 = r58645 <= r58661;
        float r58663 = 3;
        float r58664 = pow(r58645, r58663);
        float r58665 = 2;
        float r58666 = pow(r58648, r58665);
        float r58667 = r58664 * r58666;
        float r58668 = pow(r58645, r58665);
        float r58669 = r58668 * r58648;
        float r58670 = r58667 + r58669;
        float r58671 = r58645 + r58670;
        float r58672 = cos(r58648);
        float r58673 = r58651 * r58672;
        float r58674 = sin(r58648);
        float r58675 = r58654 * r58674;
        float r58676 = r58673 - r58675;
        float r58677 = r58654 * r58672;
        float r58678 = r58676 / r58677;
        float r58679 = r58662 ? r58671 : r58678;
        float r58680 = r58647 ? r58660 : r58679;
        return r58680;
}

double f_od(double x, double eps) {
        double r58681 = eps;
        double r58682 = -5.820154306538017e-17;
        bool r58683 = r58681 <= r58682;
        double r58684 = x;
        double r58685 = tan(r58684);
        double r58686 = tan(r58681);
        double r58687 = r58685 + r58686;
        double r58688 = 1;
        double r58689 = r58685 * r58686;
        double r58690 = r58688 - r58689;
        double r58691 = r58687 / r58690;
        double r58692 = r58691 * r58691;
        double r58693 = r58685 * r58685;
        double r58694 = r58692 - r58693;
        double r58695 = r58691 + r58685;
        double r58696 = r58694 / r58695;
        double r58697 = 1.9089152008804126e-17;
        bool r58698 = r58681 <= r58697;
        double r58699 = 3;
        double r58700 = pow(r58681, r58699);
        double r58701 = 2;
        double r58702 = pow(r58684, r58701);
        double r58703 = r58700 * r58702;
        double r58704 = pow(r58681, r58701);
        double r58705 = r58704 * r58684;
        double r58706 = r58703 + r58705;
        double r58707 = r58681 + r58706;
        double r58708 = cos(r58684);
        double r58709 = r58687 * r58708;
        double r58710 = sin(r58684);
        double r58711 = r58690 * r58710;
        double r58712 = r58709 - r58711;
        double r58713 = r58690 * r58708;
        double r58714 = r58712 / r58713;
        double r58715 = r58698 ? r58707 : r58714;
        double r58716 = r58683 ? r58696 : r58715;
        return r58716;
}

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 r58717, r58718, r58719, r58720, r58721, r58722;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58717);
        mpfr_init(r58718);
        mpfr_init(r58719);
        mpfr_init(r58720);
        mpfr_init(r58721);
        mpfr_init(r58722);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58717, x, MPFR_RNDN);
        mpfr_set_d(r58718, eps, MPFR_RNDN);
        mpfr_add(r58719, r58717, r58718, MPFR_RNDN);
        mpfr_tan(r58720, r58719, MPFR_RNDN);
        mpfr_tan(r58721, r58717, MPFR_RNDN);
        mpfr_sub(r58722, r58720, r58721, MPFR_RNDN);
        return mpfr_get_d(r58722, MPFR_RNDN);
}

static mpfr_t r58723, r58724, r58725, r58726, r58727, r58728, r58729, r58730, r58731, r58732, r58733, r58734, r58735, r58736, r58737, r58738, r58739, r58740, r58741, r58742, r58743, r58744, r58745, r58746, r58747, r58748, r58749, r58750, r58751, r58752, r58753, r58754, r58755, r58756, r58757, r58758;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58723);
        mpfr_init_set_str(r58724, "-5.820154306538017e-17", 10, MPFR_RNDN);
        mpfr_init(r58725);
        mpfr_init(r58726);
        mpfr_init(r58727);
        mpfr_init(r58728);
        mpfr_init(r58729);
        mpfr_init_set_str(r58730, "1", 10, MPFR_RNDN);
        mpfr_init(r58731);
        mpfr_init(r58732);
        mpfr_init(r58733);
        mpfr_init(r58734);
        mpfr_init(r58735);
        mpfr_init(r58736);
        mpfr_init(r58737);
        mpfr_init(r58738);
        mpfr_init_set_str(r58739, "1.9089152008804126e-17", 10, MPFR_RNDN);
        mpfr_init(r58740);
        mpfr_init_set_str(r58741, "3", 10, MPFR_RNDN);
        mpfr_init(r58742);
        mpfr_init_set_str(r58743, "2", 10, MPFR_RNDN);
        mpfr_init(r58744);
        mpfr_init(r58745);
        mpfr_init(r58746);
        mpfr_init(r58747);
        mpfr_init(r58748);
        mpfr_init(r58749);
        mpfr_init(r58750);
        mpfr_init(r58751);
        mpfr_init(r58752);
        mpfr_init(r58753);
        mpfr_init(r58754);
        mpfr_init(r58755);
        mpfr_init(r58756);
        mpfr_init(r58757);
        mpfr_init(r58758);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58723, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58725, mpfr_cmp(r58723, r58724) <= 0, MPFR_RNDN);
        mpfr_set_d(r58726, x, MPFR_RNDN);
        mpfr_tan(r58727, r58726, MPFR_RNDN);
        mpfr_tan(r58728, r58723, MPFR_RNDN);
        mpfr_add(r58729, r58727, r58728, MPFR_RNDN);
        ;
        mpfr_mul(r58731, r58727, r58728, MPFR_RNDN);
        mpfr_sub(r58732, r58730, r58731, MPFR_RNDN);
        mpfr_div(r58733, r58729, r58732, MPFR_RNDN);
        mpfr_mul(r58734, r58733, r58733, MPFR_RNDN);
        mpfr_mul(r58735, r58727, r58727, MPFR_RNDN);
        mpfr_sub(r58736, r58734, r58735, MPFR_RNDN);
        mpfr_add(r58737, r58733, r58727, MPFR_RNDN);
        mpfr_div(r58738, r58736, r58737, MPFR_RNDN);
        ;
        mpfr_set_si(r58740, mpfr_cmp(r58723, r58739) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r58742, r58723, r58741, MPFR_RNDN);
        ;
        mpfr_pow(r58744, r58726, r58743, MPFR_RNDN);
        mpfr_mul(r58745, r58742, r58744, MPFR_RNDN);
        mpfr_pow(r58746, r58723, r58743, MPFR_RNDN);
        mpfr_mul(r58747, r58746, r58726, MPFR_RNDN);
        mpfr_add(r58748, r58745, r58747, MPFR_RNDN);
        mpfr_add(r58749, r58723, r58748, MPFR_RNDN);
        mpfr_cos(r58750, r58726, MPFR_RNDN);
        mpfr_mul(r58751, r58729, r58750, MPFR_RNDN);
        mpfr_sin(r58752, r58726, MPFR_RNDN);
        mpfr_mul(r58753, r58732, r58752, MPFR_RNDN);
        mpfr_sub(r58754, r58751, r58753, MPFR_RNDN);
        mpfr_mul(r58755, r58732, r58750, MPFR_RNDN);
        mpfr_div(r58756, r58754, r58755, MPFR_RNDN);
        if (mpfr_get_si(r58740, MPFR_RNDN)) { mpfr_set(r58757, r58749, MPFR_RNDN); } else { mpfr_set(r58757, r58756, MPFR_RNDN); };
        if (mpfr_get_si(r58725, MPFR_RNDN)) { mpfr_set(r58758, r58738, MPFR_RNDN); } else { mpfr_set(r58758, r58757, MPFR_RNDN); };
        return mpfr_get_d(r58758, MPFR_RNDN);
}

static mpfr_t r58759, r58760, r58761, r58762, r58763, r58764, r58765, r58766, r58767, r58768, r58769, r58770, r58771, r58772, r58773, r58774, r58775, r58776, r58777, r58778, r58779, r58780, r58781, r58782, r58783, r58784, r58785, r58786, r58787, r58788, r58789, r58790, r58791, r58792, r58793, r58794;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58759);
        mpfr_init_set_str(r58760, "-5.820154306538017e-17", 10, MPFR_RNDN);
        mpfr_init(r58761);
        mpfr_init(r58762);
        mpfr_init(r58763);
        mpfr_init(r58764);
        mpfr_init(r58765);
        mpfr_init_set_str(r58766, "1", 10, MPFR_RNDN);
        mpfr_init(r58767);
        mpfr_init(r58768);
        mpfr_init(r58769);
        mpfr_init(r58770);
        mpfr_init(r58771);
        mpfr_init(r58772);
        mpfr_init(r58773);
        mpfr_init(r58774);
        mpfr_init_set_str(r58775, "1.9089152008804126e-17", 10, MPFR_RNDN);
        mpfr_init(r58776);
        mpfr_init_set_str(r58777, "3", 10, MPFR_RNDN);
        mpfr_init(r58778);
        mpfr_init_set_str(r58779, "2", 10, MPFR_RNDN);
        mpfr_init(r58780);
        mpfr_init(r58781);
        mpfr_init(r58782);
        mpfr_init(r58783);
        mpfr_init(r58784);
        mpfr_init(r58785);
        mpfr_init(r58786);
        mpfr_init(r58787);
        mpfr_init(r58788);
        mpfr_init(r58789);
        mpfr_init(r58790);
        mpfr_init(r58791);
        mpfr_init(r58792);
        mpfr_init(r58793);
        mpfr_init(r58794);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r58759, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58761, mpfr_cmp(r58759, r58760) <= 0, MPFR_RNDN);
        mpfr_set_d(r58762, x, MPFR_RNDN);
        mpfr_tan(r58763, r58762, MPFR_RNDN);
        mpfr_tan(r58764, r58759, MPFR_RNDN);
        mpfr_add(r58765, r58763, r58764, MPFR_RNDN);
        ;
        mpfr_mul(r58767, r58763, r58764, MPFR_RNDN);
        mpfr_sub(r58768, r58766, r58767, MPFR_RNDN);
        mpfr_div(r58769, r58765, r58768, MPFR_RNDN);
        mpfr_mul(r58770, r58769, r58769, MPFR_RNDN);
        mpfr_mul(r58771, r58763, r58763, MPFR_RNDN);
        mpfr_sub(r58772, r58770, r58771, MPFR_RNDN);
        mpfr_add(r58773, r58769, r58763, MPFR_RNDN);
        mpfr_div(r58774, r58772, r58773, MPFR_RNDN);
        ;
        mpfr_set_si(r58776, mpfr_cmp(r58759, r58775) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r58778, r58759, r58777, MPFR_RNDN);
        ;
        mpfr_pow(r58780, r58762, r58779, MPFR_RNDN);
        mpfr_mul(r58781, r58778, r58780, MPFR_RNDN);
        mpfr_pow(r58782, r58759, r58779, MPFR_RNDN);
        mpfr_mul(r58783, r58782, r58762, MPFR_RNDN);
        mpfr_add(r58784, r58781, r58783, MPFR_RNDN);
        mpfr_add(r58785, r58759, r58784, MPFR_RNDN);
        mpfr_cos(r58786, r58762, MPFR_RNDN);
        mpfr_mul(r58787, r58765, r58786, MPFR_RNDN);
        mpfr_sin(r58788, r58762, MPFR_RNDN);
        mpfr_mul(r58789, r58768, r58788, MPFR_RNDN);
        mpfr_sub(r58790, r58787, r58789, MPFR_RNDN);
        mpfr_mul(r58791, r58768, r58786, MPFR_RNDN);
        mpfr_div(r58792, r58790, r58791, MPFR_RNDN);
        if (mpfr_get_si(r58776, MPFR_RNDN)) { mpfr_set(r58793, r58785, MPFR_RNDN); } else { mpfr_set(r58793, r58792, MPFR_RNDN); };
        if (mpfr_get_si(r58761, MPFR_RNDN)) { mpfr_set(r58794, r58774, MPFR_RNDN); } else { mpfr_set(r58794, r58793, MPFR_RNDN); };
        return mpfr_get_d(r58794, MPFR_RNDN);
}

