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

char *name = "2cos (problem 3.3.5)";

double f_if(float x, float eps) {
        float r9668 = x;
        float r9669 = eps;
        float r9670 = r9668 + r9669;
        float r9671 = cos(r9670);
        float r9672 = cos(r9668);
        float r9673 = r9671 - r9672;
        return r9673;
}

double f_id(double x, double eps) {
        double r9674 = x;
        double r9675 = eps;
        double r9676 = r9674 + r9675;
        double r9677 = cos(r9676);
        double r9678 = cos(r9674);
        double r9679 = r9677 - r9678;
        return r9679;
}


double f_of(float x, float eps) {
        float r9680 = x;
        float r9681 = cos(r9680);
        float r9682 = eps;
        float r9683 = cos(r9682);
        float r9684 = r9681 * r9683;
        float r9685 = sin(r9680);
        float r9686 = sin(r9682);
        float r9687 = r9685 * r9686;
        float r9688 = r9684 - r9687;
        float r9689 = r9688 - r9681;
        float r9690 = -0.0316183941269019;
        bool r9691 = r9689 <= r9690;
        float r9692 = fma(r9686, r9685, r9681);
        float r9693 = r9684 - r9692;
        float r9694 = 0.012104264989223186;
        bool r9695 = r9689 <= r9694;
        float r9696 = -2;
        float r9697 = r9680 + r9680;
        float r9698 = r9697 + r9682;
        float r9699 = 2;
        float r9700 = r9698 / r9699;
        float r9701 = sin(r9700);
        float r9702 = r9696 * r9701;
        float r9703 = r9682 / r9699;
        float r9704 = sin(r9703);
        float r9705 = r9702 * r9704;
        float r9706 = r9695 ? r9705 : r9689;
        float r9707 = r9691 ? r9693 : r9706;
        return r9707;
}

double f_od(double x, double eps) {
        double r9708 = x;
        double r9709 = cos(r9708);
        double r9710 = eps;
        double r9711 = cos(r9710);
        double r9712 = r9709 * r9711;
        double r9713 = sin(r9708);
        double r9714 = sin(r9710);
        double r9715 = r9713 * r9714;
        double r9716 = r9712 - r9715;
        double r9717 = r9716 - r9709;
        double r9718 = -0.0316183941269019;
        bool r9719 = r9717 <= r9718;
        double r9720 = fma(r9714, r9713, r9709);
        double r9721 = r9712 - r9720;
        double r9722 = 0.012104264989223186;
        bool r9723 = r9717 <= r9722;
        double r9724 = -2;
        double r9725 = r9708 + r9708;
        double r9726 = r9725 + r9710;
        double r9727 = 2;
        double r9728 = r9726 / r9727;
        double r9729 = sin(r9728);
        double r9730 = r9724 * r9729;
        double r9731 = r9710 / r9727;
        double r9732 = sin(r9731);
        double r9733 = r9730 * r9732;
        double r9734 = r9723 ? r9733 : r9717;
        double r9735 = r9719 ? r9721 : r9734;
        return r9735;
}

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 r9736, r9737, r9738, r9739, r9740, r9741;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9736);
        mpfr_init(r9737);
        mpfr_init(r9738);
        mpfr_init(r9739);
        mpfr_init(r9740);
        mpfr_init(r9741);
}

double f_im(double x, double eps) {
        mpfr_set_d(r9736, x, MPFR_RNDN);
        mpfr_set_d(r9737, eps, MPFR_RNDN);
        mpfr_add(r9738, r9736, r9737, MPFR_RNDN);
        mpfr_cos(r9739, r9738, MPFR_RNDN);
        mpfr_cos(r9740, r9736, MPFR_RNDN);
        mpfr_sub(r9741, r9739, r9740, MPFR_RNDN);
        return mpfr_get_d(r9741, MPFR_RNDN);
}

static mpfr_t r9742, r9743, r9744, r9745, r9746, r9747, r9748, r9749, r9750, r9751, r9752, r9753, r9754, r9755, r9756, r9757, r9758, r9759, r9760, r9761, r9762, r9763, r9764, r9765, r9766, r9767, r9768, r9769;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9742);
        mpfr_init(r9743);
        mpfr_init(r9744);
        mpfr_init(r9745);
        mpfr_init(r9746);
        mpfr_init(r9747);
        mpfr_init(r9748);
        mpfr_init(r9749);
        mpfr_init(r9750);
        mpfr_init(r9751);
        mpfr_init_set_str(r9752, "-0.0316183941269019", 10, MPFR_RNDN);
        mpfr_init(r9753);
        mpfr_init(r9754);
        mpfr_init(r9755);
        mpfr_init_set_str(r9756, "0.012104264989223186", 10, MPFR_RNDN);
        mpfr_init(r9757);
        mpfr_init_set_str(r9758, "-2", 10, MPFR_RNDN);
        mpfr_init(r9759);
        mpfr_init(r9760);
        mpfr_init_set_str(r9761, "2", 10, MPFR_RNDN);
        mpfr_init(r9762);
        mpfr_init(r9763);
        mpfr_init(r9764);
        mpfr_init(r9765);
        mpfr_init(r9766);
        mpfr_init(r9767);
        mpfr_init(r9768);
        mpfr_init(r9769);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r9742, x, MPFR_RNDN);
        mpfr_cos(r9743, r9742, MPFR_RNDN);
        mpfr_set_d(r9744, eps, MPFR_RNDN);
        mpfr_cos(r9745, r9744, MPFR_RNDN);
        mpfr_mul(r9746, r9743, r9745, MPFR_RNDN);
        mpfr_sin(r9747, r9742, MPFR_RNDN);
        mpfr_sin(r9748, r9744, MPFR_RNDN);
        mpfr_mul(r9749, r9747, r9748, MPFR_RNDN);
        mpfr_sub(r9750, r9746, r9749, MPFR_RNDN);
        mpfr_sub(r9751, r9750, r9743, MPFR_RNDN);
        ;
        mpfr_set_si(r9753, mpfr_cmp(r9751, r9752) <= 0, MPFR_RNDN);
        mpfr_fma(r9754, r9748, r9747, r9743, MPFR_RNDN);
        mpfr_sub(r9755, r9746, r9754, MPFR_RNDN);
        ;
        mpfr_set_si(r9757, mpfr_cmp(r9751, r9756) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r9759, r9742, r9742, MPFR_RNDN);
        mpfr_add(r9760, r9759, r9744, MPFR_RNDN);
        ;
        mpfr_div(r9762, r9760, r9761, MPFR_RNDN);
        mpfr_sin(r9763, r9762, MPFR_RNDN);
        mpfr_mul(r9764, r9758, r9763, MPFR_RNDN);
        mpfr_div(r9765, r9744, r9761, MPFR_RNDN);
        mpfr_sin(r9766, r9765, MPFR_RNDN);
        mpfr_mul(r9767, r9764, r9766, MPFR_RNDN);
        if (mpfr_get_si(r9757, MPFR_RNDN)) { mpfr_set(r9768, r9767, MPFR_RNDN); } else { mpfr_set(r9768, r9751, MPFR_RNDN); };
        if (mpfr_get_si(r9753, MPFR_RNDN)) { mpfr_set(r9769, r9755, MPFR_RNDN); } else { mpfr_set(r9769, r9768, MPFR_RNDN); };
        return mpfr_get_d(r9769, MPFR_RNDN);
}

static mpfr_t r9770, r9771, r9772, r9773, r9774, r9775, r9776, r9777, r9778, r9779, r9780, r9781, r9782, r9783, r9784, r9785, r9786, r9787, r9788, r9789, r9790, r9791, r9792, r9793, r9794, r9795, r9796, r9797;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9770);
        mpfr_init(r9771);
        mpfr_init(r9772);
        mpfr_init(r9773);
        mpfr_init(r9774);
        mpfr_init(r9775);
        mpfr_init(r9776);
        mpfr_init(r9777);
        mpfr_init(r9778);
        mpfr_init(r9779);
        mpfr_init_set_str(r9780, "-0.0316183941269019", 10, MPFR_RNDN);
        mpfr_init(r9781);
        mpfr_init(r9782);
        mpfr_init(r9783);
        mpfr_init_set_str(r9784, "0.012104264989223186", 10, MPFR_RNDN);
        mpfr_init(r9785);
        mpfr_init_set_str(r9786, "-2", 10, MPFR_RNDN);
        mpfr_init(r9787);
        mpfr_init(r9788);
        mpfr_init_set_str(r9789, "2", 10, MPFR_RNDN);
        mpfr_init(r9790);
        mpfr_init(r9791);
        mpfr_init(r9792);
        mpfr_init(r9793);
        mpfr_init(r9794);
        mpfr_init(r9795);
        mpfr_init(r9796);
        mpfr_init(r9797);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r9770, x, MPFR_RNDN);
        mpfr_cos(r9771, r9770, MPFR_RNDN);
        mpfr_set_d(r9772, eps, MPFR_RNDN);
        mpfr_cos(r9773, r9772, MPFR_RNDN);
        mpfr_mul(r9774, r9771, r9773, MPFR_RNDN);
        mpfr_sin(r9775, r9770, MPFR_RNDN);
        mpfr_sin(r9776, r9772, MPFR_RNDN);
        mpfr_mul(r9777, r9775, r9776, MPFR_RNDN);
        mpfr_sub(r9778, r9774, r9777, MPFR_RNDN);
        mpfr_sub(r9779, r9778, r9771, MPFR_RNDN);
        ;
        mpfr_set_si(r9781, mpfr_cmp(r9779, r9780) <= 0, MPFR_RNDN);
        mpfr_fma(r9782, r9776, r9775, r9771, MPFR_RNDN);
        mpfr_sub(r9783, r9774, r9782, MPFR_RNDN);
        ;
        mpfr_set_si(r9785, mpfr_cmp(r9779, r9784) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r9787, r9770, r9770, MPFR_RNDN);
        mpfr_add(r9788, r9787, r9772, MPFR_RNDN);
        ;
        mpfr_div(r9790, r9788, r9789, MPFR_RNDN);
        mpfr_sin(r9791, r9790, MPFR_RNDN);
        mpfr_mul(r9792, r9786, r9791, MPFR_RNDN);
        mpfr_div(r9793, r9772, r9789, MPFR_RNDN);
        mpfr_sin(r9794, r9793, MPFR_RNDN);
        mpfr_mul(r9795, r9792, r9794, MPFR_RNDN);
        if (mpfr_get_si(r9785, MPFR_RNDN)) { mpfr_set(r9796, r9795, MPFR_RNDN); } else { mpfr_set(r9796, r9779, MPFR_RNDN); };
        if (mpfr_get_si(r9781, MPFR_RNDN)) { mpfr_set(r9797, r9783, MPFR_RNDN); } else { mpfr_set(r9797, r9796, MPFR_RNDN); };
        return mpfr_get_d(r9797, MPFR_RNDN);
}

