#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "NMSE problem 3.3.2";

double f_if(float x, float eps) {
        float r27616 = x;
        float r27617 = eps;
        float r27618 = r27616 + r27617;
        float r27619 = tan(r27618);
        float r27620 = tan(r27616);
        float r27621 = r27619 - r27620;
        return r27621;
}

double f_id(double x, double eps) {
        double r27622 = x;
        double r27623 = eps;
        double r27624 = r27622 + r27623;
        double r27625 = tan(r27624);
        double r27626 = tan(r27622);
        double r27627 = r27625 - r27626;
        return r27627;
}


double f_of(float x, float eps) {
        float r27628 = eps;
        float r27629 = -1.7926102735642982e-37;
        bool r27630 = r27628 <= r27629;
        float r27631 = x;
        float r27632 = tan(r27631);
        float r27633 = tan(r27628);
        float r27634 = r27632 + r27633;
        float r27635 = cos(r27631);
        float r27636 = r27634 * r27635;
        float r27637 = 1;
        float r27638 = r27632 * r27633;
        float r27639 = r27637 - r27638;
        float r27640 = r27639 * r27639;
        float r27641 = sin(r27631);
        float r27642 = 3;
        float r27643 = pow(r27641, r27642);
        float r27644 = r27643 * r27639;
        float r27645 = r27640 * r27644;
        float r27646 = cbrt(r27645);
        float r27647 = r27636 - r27646;
        float r27648 = r27639 * r27635;
        float r27649 = r27647 / r27648;
        float r27650 = 8.087235771864618e-51;
        bool r27651 = r27628 <= r27650;
        float r27652 = pow(r27628, r27642);
        float r27653 = 2;
        float r27654 = pow(r27631, r27653);
        float r27655 = r27652 * r27654;
        float r27656 = pow(r27628, r27653);
        float r27657 = r27656 * r27631;
        float r27658 = r27655 + r27657;
        float r27659 = r27628 + r27658;
        float r27660 = r27639 * r27641;
        float r27661 = exp(r27660);
        float r27662 = log(r27661);
        float r27663 = r27636 - r27662;
        float r27664 = r27663 / r27648;
        float r27665 = r27651 ? r27659 : r27664;
        float r27666 = r27630 ? r27649 : r27665;
        return r27666;
}

double f_od(double x, double eps) {
        double r27667 = eps;
        double r27668 = -1.7926102735642982e-37;
        bool r27669 = r27667 <= r27668;
        double r27670 = x;
        double r27671 = tan(r27670);
        double r27672 = tan(r27667);
        double r27673 = r27671 + r27672;
        double r27674 = cos(r27670);
        double r27675 = r27673 * r27674;
        double r27676 = 1;
        double r27677 = r27671 * r27672;
        double r27678 = r27676 - r27677;
        double r27679 = r27678 * r27678;
        double r27680 = sin(r27670);
        double r27681 = 3;
        double r27682 = pow(r27680, r27681);
        double r27683 = r27682 * r27678;
        double r27684 = r27679 * r27683;
        double r27685 = cbrt(r27684);
        double r27686 = r27675 - r27685;
        double r27687 = r27678 * r27674;
        double r27688 = r27686 / r27687;
        double r27689 = 8.087235771864618e-51;
        bool r27690 = r27667 <= r27689;
        double r27691 = pow(r27667, r27681);
        double r27692 = 2;
        double r27693 = pow(r27670, r27692);
        double r27694 = r27691 * r27693;
        double r27695 = pow(r27667, r27692);
        double r27696 = r27695 * r27670;
        double r27697 = r27694 + r27696;
        double r27698 = r27667 + r27697;
        double r27699 = r27678 * r27680;
        double r27700 = exp(r27699);
        double r27701 = log(r27700);
        double r27702 = r27675 - r27701;
        double r27703 = r27702 / r27687;
        double r27704 = r27690 ? r27698 : r27703;
        double r27705 = r27669 ? r27688 : r27704;
        return r27705;
}

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 r27706, r27707, r27708, r27709, r27710, r27711;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r27706);
        mpfr_init(r27707);
        mpfr_init(r27708);
        mpfr_init(r27709);
        mpfr_init(r27710);
        mpfr_init(r27711);
}

double f_im(double x, double eps) {
        mpfr_set_d(r27706, x, MPFR_RNDN);
        mpfr_set_d(r27707, eps, MPFR_RNDN);
        mpfr_add(r27708, r27706, r27707, MPFR_RNDN);
        mpfr_tan(r27709, r27708, MPFR_RNDN);
        mpfr_tan(r27710, r27706, MPFR_RNDN);
        mpfr_sub(r27711, r27709, r27710, MPFR_RNDN);
        return mpfr_get_d(r27711, MPFR_RNDN);
}

static mpfr_t r27712, r27713, r27714, r27715, r27716, r27717, r27718, r27719, r27720, r27721, r27722, r27723, r27724, r27725, r27726, r27727, r27728, r27729, r27730, r27731, r27732, r27733, r27734, r27735, r27736, r27737, r27738, r27739, r27740, r27741, r27742, r27743, r27744, r27745, r27746, r27747, r27748, r27749, r27750;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r27712);
        mpfr_init_set_str(r27713, "-1.7926102735642982e-37", 10, MPFR_RNDN);
        mpfr_init(r27714);
        mpfr_init(r27715);
        mpfr_init(r27716);
        mpfr_init(r27717);
        mpfr_init(r27718);
        mpfr_init(r27719);
        mpfr_init(r27720);
        mpfr_init_set_str(r27721, "1", 10, MPFR_RNDN);
        mpfr_init(r27722);
        mpfr_init(r27723);
        mpfr_init(r27724);
        mpfr_init(r27725);
        mpfr_init_set_str(r27726, "3", 10, MPFR_RNDN);
        mpfr_init(r27727);
        mpfr_init(r27728);
        mpfr_init(r27729);
        mpfr_init(r27730);
        mpfr_init(r27731);
        mpfr_init(r27732);
        mpfr_init(r27733);
        mpfr_init_set_str(r27734, "8.087235771864618e-51", 10, MPFR_RNDN);
        mpfr_init(r27735);
        mpfr_init(r27736);
        mpfr_init_set_str(r27737, "2", 10, MPFR_RNDN);
        mpfr_init(r27738);
        mpfr_init(r27739);
        mpfr_init(r27740);
        mpfr_init(r27741);
        mpfr_init(r27742);
        mpfr_init(r27743);
        mpfr_init(r27744);
        mpfr_init(r27745);
        mpfr_init(r27746);
        mpfr_init(r27747);
        mpfr_init(r27748);
        mpfr_init(r27749);
        mpfr_init(r27750);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r27712, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r27714, mpfr_cmp(r27712, r27713) <= 0, MPFR_RNDN);
        mpfr_set_d(r27715, x, MPFR_RNDN);
        mpfr_tan(r27716, r27715, MPFR_RNDN);
        mpfr_tan(r27717, r27712, MPFR_RNDN);
        mpfr_add(r27718, r27716, r27717, MPFR_RNDN);
        mpfr_cos(r27719, r27715, MPFR_RNDN);
        mpfr_mul(r27720, r27718, r27719, MPFR_RNDN);
        ;
        mpfr_mul(r27722, r27716, r27717, MPFR_RNDN);
        mpfr_sub(r27723, r27721, r27722, MPFR_RNDN);
        mpfr_mul(r27724, r27723, r27723, MPFR_RNDN);
        mpfr_sin(r27725, r27715, MPFR_RNDN);
        ;
        mpfr_pow(r27727, r27725, r27726, MPFR_RNDN);
        mpfr_mul(r27728, r27727, r27723, MPFR_RNDN);
        mpfr_mul(r27729, r27724, r27728, MPFR_RNDN);
        mpfr_cbrt(r27730, r27729, MPFR_RNDN);
        mpfr_sub(r27731, r27720, r27730, MPFR_RNDN);
        mpfr_mul(r27732, r27723, r27719, MPFR_RNDN);
        mpfr_div(r27733, r27731, r27732, MPFR_RNDN);
        ;
        mpfr_set_si(r27735, mpfr_cmp(r27712, r27734) <= 0, MPFR_RNDN);
        mpfr_pow(r27736, r27712, r27726, MPFR_RNDN);
        ;
        mpfr_pow(r27738, r27715, r27737, MPFR_RNDN);
        mpfr_mul(r27739, r27736, r27738, MPFR_RNDN);
        mpfr_pow(r27740, r27712, r27737, MPFR_RNDN);
        mpfr_mul(r27741, r27740, r27715, MPFR_RNDN);
        mpfr_add(r27742, r27739, r27741, MPFR_RNDN);
        mpfr_add(r27743, r27712, r27742, MPFR_RNDN);
        mpfr_mul(r27744, r27723, r27725, MPFR_RNDN);
        mpfr_exp(r27745, r27744, MPFR_RNDN);
        mpfr_log(r27746, r27745, MPFR_RNDN);
        mpfr_sub(r27747, r27720, r27746, MPFR_RNDN);
        mpfr_div(r27748, r27747, r27732, MPFR_RNDN);
        if (mpfr_get_si(r27735, MPFR_RNDN)) { mpfr_set(r27749, r27743, MPFR_RNDN); } else { mpfr_set(r27749, r27748, MPFR_RNDN); };
        if (mpfr_get_si(r27714, MPFR_RNDN)) { mpfr_set(r27750, r27733, MPFR_RNDN); } else { mpfr_set(r27750, r27749, MPFR_RNDN); };
        return mpfr_get_d(r27750, MPFR_RNDN);
}

static mpfr_t r27751, r27752, r27753, r27754, r27755, r27756, r27757, r27758, r27759, r27760, r27761, r27762, r27763, r27764, r27765, r27766, r27767, r27768, r27769, r27770, r27771, r27772, r27773, r27774, r27775, r27776, r27777, r27778, r27779, r27780, r27781, r27782, r27783, r27784, r27785, r27786, r27787, r27788, r27789;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r27751);
        mpfr_init_set_str(r27752, "-1.7926102735642982e-37", 10, MPFR_RNDN);
        mpfr_init(r27753);
        mpfr_init(r27754);
        mpfr_init(r27755);
        mpfr_init(r27756);
        mpfr_init(r27757);
        mpfr_init(r27758);
        mpfr_init(r27759);
        mpfr_init_set_str(r27760, "1", 10, MPFR_RNDN);
        mpfr_init(r27761);
        mpfr_init(r27762);
        mpfr_init(r27763);
        mpfr_init(r27764);
        mpfr_init_set_str(r27765, "3", 10, MPFR_RNDN);
        mpfr_init(r27766);
        mpfr_init(r27767);
        mpfr_init(r27768);
        mpfr_init(r27769);
        mpfr_init(r27770);
        mpfr_init(r27771);
        mpfr_init(r27772);
        mpfr_init_set_str(r27773, "8.087235771864618e-51", 10, MPFR_RNDN);
        mpfr_init(r27774);
        mpfr_init(r27775);
        mpfr_init_set_str(r27776, "2", 10, MPFR_RNDN);
        mpfr_init(r27777);
        mpfr_init(r27778);
        mpfr_init(r27779);
        mpfr_init(r27780);
        mpfr_init(r27781);
        mpfr_init(r27782);
        mpfr_init(r27783);
        mpfr_init(r27784);
        mpfr_init(r27785);
        mpfr_init(r27786);
        mpfr_init(r27787);
        mpfr_init(r27788);
        mpfr_init(r27789);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r27751, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r27753, mpfr_cmp(r27751, r27752) <= 0, MPFR_RNDN);
        mpfr_set_d(r27754, x, MPFR_RNDN);
        mpfr_tan(r27755, r27754, MPFR_RNDN);
        mpfr_tan(r27756, r27751, MPFR_RNDN);
        mpfr_add(r27757, r27755, r27756, MPFR_RNDN);
        mpfr_cos(r27758, r27754, MPFR_RNDN);
        mpfr_mul(r27759, r27757, r27758, MPFR_RNDN);
        ;
        mpfr_mul(r27761, r27755, r27756, MPFR_RNDN);
        mpfr_sub(r27762, r27760, r27761, MPFR_RNDN);
        mpfr_mul(r27763, r27762, r27762, MPFR_RNDN);
        mpfr_sin(r27764, r27754, MPFR_RNDN);
        ;
        mpfr_pow(r27766, r27764, r27765, MPFR_RNDN);
        mpfr_mul(r27767, r27766, r27762, MPFR_RNDN);
        mpfr_mul(r27768, r27763, r27767, MPFR_RNDN);
        mpfr_cbrt(r27769, r27768, MPFR_RNDN);
        mpfr_sub(r27770, r27759, r27769, MPFR_RNDN);
        mpfr_mul(r27771, r27762, r27758, MPFR_RNDN);
        mpfr_div(r27772, r27770, r27771, MPFR_RNDN);
        ;
        mpfr_set_si(r27774, mpfr_cmp(r27751, r27773) <= 0, MPFR_RNDN);
        mpfr_pow(r27775, r27751, r27765, MPFR_RNDN);
        ;
        mpfr_pow(r27777, r27754, r27776, MPFR_RNDN);
        mpfr_mul(r27778, r27775, r27777, MPFR_RNDN);
        mpfr_pow(r27779, r27751, r27776, MPFR_RNDN);
        mpfr_mul(r27780, r27779, r27754, MPFR_RNDN);
        mpfr_add(r27781, r27778, r27780, MPFR_RNDN);
        mpfr_add(r27782, r27751, r27781, MPFR_RNDN);
        mpfr_mul(r27783, r27762, r27764, MPFR_RNDN);
        mpfr_exp(r27784, r27783, MPFR_RNDN);
        mpfr_log(r27785, r27784, MPFR_RNDN);
        mpfr_sub(r27786, r27759, r27785, MPFR_RNDN);
        mpfr_div(r27787, r27786, r27771, MPFR_RNDN);
        if (mpfr_get_si(r27774, MPFR_RNDN)) { mpfr_set(r27788, r27782, MPFR_RNDN); } else { mpfr_set(r27788, r27787, MPFR_RNDN); };
        if (mpfr_get_si(r27753, MPFR_RNDN)) { mpfr_set(r27789, r27772, MPFR_RNDN); } else { mpfr_set(r27789, r27788, MPFR_RNDN); };
        return mpfr_get_d(r27789, MPFR_RNDN);
}

