#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 r5180698 = x;
        float r5180699 = eps;
        float r5180700 = r5180698 + r5180699;
        float r5180701 = cos(r5180700);
        float r5180702 = cos(r5180698);
        float r5180703 = r5180701 - r5180702;
        return r5180703;
}

double f_id(double x, double eps) {
        double r5180704 = x;
        double r5180705 = eps;
        double r5180706 = r5180704 + r5180705;
        double r5180707 = cos(r5180706);
        double r5180708 = cos(r5180704);
        double r5180709 = r5180707 - r5180708;
        return r5180709;
}


double f_of(float x, float eps) {
        float r5180710 = eps;
        float r5180711 = -969039.1141203786f;
        bool r5180712 = r5180710 <= r5180711;
        float r5180713 = x;
        float r5180714 = cos(r5180713);
        float r5180715 = cos(r5180710);
        float r5180716 = r5180714 * r5180715;
        float r5180717 = sin(r5180713);
        float r5180718 = sin(r5180710);
        float r5180719 = r5180717 * r5180718;
        float r5180720 = r5180719 + r5180714;
        float r5180721 = r5180716 - r5180720;
        float r5180722 = 0.00011509728437006627f;
        bool r5180723 = r5180710 <= r5180722;
        float r5180724 = -2.0f;
        float r5180725 = 2.0f;
        float r5180726 = r5180710 / r5180725;
        float r5180727 = sin(r5180726);
        float r5180728 = r5180724 * r5180727;
        float r5180729 = r5180713 + r5180710;
        float r5180730 = r5180729 + r5180713;
        float r5180731 = r5180730 / r5180725;
        float r5180732 = sin(r5180731);
        float r5180733 = r5180728 * r5180732;
        float r5180734 = r5180723 ? r5180733 : r5180721;
        float r5180735 = r5180712 ? r5180721 : r5180734;
        return r5180735;
}

double f_od(double x, double eps) {
        double r5180736 = eps;
        double r5180737 = -969039.1141203786;
        bool r5180738 = r5180736 <= r5180737;
        double r5180739 = x;
        double r5180740 = cos(r5180739);
        double r5180741 = cos(r5180736);
        double r5180742 = r5180740 * r5180741;
        double r5180743 = sin(r5180739);
        double r5180744 = sin(r5180736);
        double r5180745 = r5180743 * r5180744;
        double r5180746 = r5180745 + r5180740;
        double r5180747 = r5180742 - r5180746;
        double r5180748 = 0.00011509728437006627;
        bool r5180749 = r5180736 <= r5180748;
        double r5180750 = -2.0;
        double r5180751 = 2.0;
        double r5180752 = r5180736 / r5180751;
        double r5180753 = sin(r5180752);
        double r5180754 = r5180750 * r5180753;
        double r5180755 = r5180739 + r5180736;
        double r5180756 = r5180755 + r5180739;
        double r5180757 = r5180756 / r5180751;
        double r5180758 = sin(r5180757);
        double r5180759 = r5180754 * r5180758;
        double r5180760 = r5180749 ? r5180759 : r5180747;
        double r5180761 = r5180738 ? r5180747 : r5180760;
        return r5180761;
}

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 r5180762, r5180763, r5180764, r5180765, r5180766, r5180767;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r5180762);
        mpfr_init(r5180763);
        mpfr_init(r5180764);
        mpfr_init(r5180765);
        mpfr_init(r5180766);
        mpfr_init(r5180767);
}

double f_im(double x, double eps) {
        mpfr_set_d(r5180762, x, MPFR_RNDN);
        mpfr_set_d(r5180763, eps, MPFR_RNDN);
        mpfr_add(r5180764, r5180762, r5180763, MPFR_RNDN);
        mpfr_cos(r5180765, r5180764, MPFR_RNDN);
        mpfr_cos(r5180766, r5180762, MPFR_RNDN);
        mpfr_sub(r5180767, r5180765, r5180766, MPFR_RNDN);
        return mpfr_get_d(r5180767, MPFR_RNDN);
}

static mpfr_t r5180768, r5180769, r5180770, r5180771, r5180772, r5180773, r5180774, r5180775, r5180776, r5180777, r5180778, r5180779, r5180780, r5180781, r5180782, r5180783, r5180784, r5180785, r5180786, r5180787, r5180788, r5180789, r5180790, r5180791, r5180792, r5180793;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r5180768);
        mpfr_init_set_str(r5180769, "-969039.1141203786", 10, MPFR_RNDN);
        mpfr_init(r5180770);
        mpfr_init(r5180771);
        mpfr_init(r5180772);
        mpfr_init(r5180773);
        mpfr_init(r5180774);
        mpfr_init(r5180775);
        mpfr_init(r5180776);
        mpfr_init(r5180777);
        mpfr_init(r5180778);
        mpfr_init(r5180779);
        mpfr_init_set_str(r5180780, "0.00011509728437006627", 10, MPFR_RNDN);
        mpfr_init(r5180781);
        mpfr_init_set_str(r5180782, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5180783, "2", 10, MPFR_RNDN);
        mpfr_init(r5180784);
        mpfr_init(r5180785);
        mpfr_init(r5180786);
        mpfr_init(r5180787);
        mpfr_init(r5180788);
        mpfr_init(r5180789);
        mpfr_init(r5180790);
        mpfr_init(r5180791);
        mpfr_init(r5180792);
        mpfr_init(r5180793);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r5180768, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5180770, mpfr_cmp(r5180768, r5180769) <= 0, MPFR_RNDN);
        mpfr_set_d(r5180771, x, MPFR_RNDN);
        mpfr_cos(r5180772, r5180771, MPFR_RNDN);
        mpfr_cos(r5180773, r5180768, MPFR_RNDN);
        mpfr_mul(r5180774, r5180772, r5180773, MPFR_RNDN);
        mpfr_sin(r5180775, r5180771, MPFR_RNDN);
        mpfr_sin(r5180776, r5180768, MPFR_RNDN);
        mpfr_mul(r5180777, r5180775, r5180776, MPFR_RNDN);
        mpfr_add(r5180778, r5180777, r5180772, MPFR_RNDN);
        mpfr_sub(r5180779, r5180774, r5180778, MPFR_RNDN);
        ;
        mpfr_set_si(r5180781, mpfr_cmp(r5180768, r5180780) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r5180784, r5180768, r5180783, MPFR_RNDN);
        mpfr_sin(r5180785, r5180784, MPFR_RNDN);
        mpfr_mul(r5180786, r5180782, r5180785, MPFR_RNDN);
        mpfr_add(r5180787, r5180771, r5180768, MPFR_RNDN);
        mpfr_add(r5180788, r5180787, r5180771, MPFR_RNDN);
        mpfr_div(r5180789, r5180788, r5180783, MPFR_RNDN);
        mpfr_sin(r5180790, r5180789, MPFR_RNDN);
        mpfr_mul(r5180791, r5180786, r5180790, MPFR_RNDN);
        if (mpfr_get_si(r5180781, MPFR_RNDN)) { mpfr_set(r5180792, r5180791, MPFR_RNDN); } else { mpfr_set(r5180792, r5180779, MPFR_RNDN); };
        if (mpfr_get_si(r5180770, MPFR_RNDN)) { mpfr_set(r5180793, r5180779, MPFR_RNDN); } else { mpfr_set(r5180793, r5180792, MPFR_RNDN); };
        return mpfr_get_d(r5180793, MPFR_RNDN);
}

static mpfr_t r5180794, r5180795, r5180796, r5180797, r5180798, r5180799, r5180800, r5180801, r5180802, r5180803, r5180804, r5180805, r5180806, r5180807, r5180808, r5180809, r5180810, r5180811, r5180812, r5180813, r5180814, r5180815, r5180816, r5180817, r5180818, r5180819;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r5180794);
        mpfr_init_set_str(r5180795, "-969039.1141203786", 10, MPFR_RNDN);
        mpfr_init(r5180796);
        mpfr_init(r5180797);
        mpfr_init(r5180798);
        mpfr_init(r5180799);
        mpfr_init(r5180800);
        mpfr_init(r5180801);
        mpfr_init(r5180802);
        mpfr_init(r5180803);
        mpfr_init(r5180804);
        mpfr_init(r5180805);
        mpfr_init_set_str(r5180806, "0.00011509728437006627", 10, MPFR_RNDN);
        mpfr_init(r5180807);
        mpfr_init_set_str(r5180808, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5180809, "2", 10, MPFR_RNDN);
        mpfr_init(r5180810);
        mpfr_init(r5180811);
        mpfr_init(r5180812);
        mpfr_init(r5180813);
        mpfr_init(r5180814);
        mpfr_init(r5180815);
        mpfr_init(r5180816);
        mpfr_init(r5180817);
        mpfr_init(r5180818);
        mpfr_init(r5180819);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r5180794, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5180796, mpfr_cmp(r5180794, r5180795) <= 0, MPFR_RNDN);
        mpfr_set_d(r5180797, x, MPFR_RNDN);
        mpfr_cos(r5180798, r5180797, MPFR_RNDN);
        mpfr_cos(r5180799, r5180794, MPFR_RNDN);
        mpfr_mul(r5180800, r5180798, r5180799, MPFR_RNDN);
        mpfr_sin(r5180801, r5180797, MPFR_RNDN);
        mpfr_sin(r5180802, r5180794, MPFR_RNDN);
        mpfr_mul(r5180803, r5180801, r5180802, MPFR_RNDN);
        mpfr_add(r5180804, r5180803, r5180798, MPFR_RNDN);
        mpfr_sub(r5180805, r5180800, r5180804, MPFR_RNDN);
        ;
        mpfr_set_si(r5180807, mpfr_cmp(r5180794, r5180806) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r5180810, r5180794, r5180809, MPFR_RNDN);
        mpfr_sin(r5180811, r5180810, MPFR_RNDN);
        mpfr_mul(r5180812, r5180808, r5180811, MPFR_RNDN);
        mpfr_add(r5180813, r5180797, r5180794, MPFR_RNDN);
        mpfr_add(r5180814, r5180813, r5180797, MPFR_RNDN);
        mpfr_div(r5180815, r5180814, r5180809, MPFR_RNDN);
        mpfr_sin(r5180816, r5180815, MPFR_RNDN);
        mpfr_mul(r5180817, r5180812, r5180816, MPFR_RNDN);
        if (mpfr_get_si(r5180807, MPFR_RNDN)) { mpfr_set(r5180818, r5180817, MPFR_RNDN); } else { mpfr_set(r5180818, r5180805, MPFR_RNDN); };
        if (mpfr_get_si(r5180796, MPFR_RNDN)) { mpfr_set(r5180819, r5180805, MPFR_RNDN); } else { mpfr_set(r5180819, r5180818, MPFR_RNDN); };
        return mpfr_get_d(r5180819, MPFR_RNDN);
}

