#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 r36709 = x;
        float r36710 = eps;
        float r36711 = r36709 + r36710;
        float r36712 = cos(r36711);
        float r36713 = cos(r36709);
        float r36714 = r36712 - r36713;
        return r36714;
}

double f_id(double x, double eps) {
        double r36715 = x;
        double r36716 = eps;
        double r36717 = r36715 + r36716;
        double r36718 = cos(r36717);
        double r36719 = cos(r36715);
        double r36720 = r36718 - r36719;
        return r36720;
}


double f_of(float x, float eps) {
        float r36721 = eps;
        float r36722 = -4.937900603750566e-17;
        bool r36723 = r36721 <= r36722;
        float r36724 = x;
        float r36725 = cos(r36724);
        float r36726 = cos(r36721);
        float r36727 = r36725 * r36726;
        float r36728 = sin(r36724);
        float r36729 = sin(r36721);
        float r36730 = r36728 * r36729;
        float r36731 = r36727 - r36730;
        float r36732 = r36731 - r36725;
        float r36733 = 0.802860764679358;
        bool r36734 = r36721 <= r36733;
        float r36735 = -2;
        float r36736 = 2;
        float r36737 = r36721 / r36736;
        float r36738 = sin(r36737);
        float r36739 = r36724 + r36724;
        float r36740 = r36721 + r36739;
        float r36741 = r36740 / r36736;
        float r36742 = sin(r36741);
        float r36743 = r36738 * r36742;
        float r36744 = r36735 * r36743;
        float r36745 = r36734 ? r36744 : r36732;
        float r36746 = r36723 ? r36732 : r36745;
        return r36746;
}

double f_od(double x, double eps) {
        double r36747 = eps;
        double r36748 = -4.937900603750566e-17;
        bool r36749 = r36747 <= r36748;
        double r36750 = x;
        double r36751 = cos(r36750);
        double r36752 = cos(r36747);
        double r36753 = r36751 * r36752;
        double r36754 = sin(r36750);
        double r36755 = sin(r36747);
        double r36756 = r36754 * r36755;
        double r36757 = r36753 - r36756;
        double r36758 = r36757 - r36751;
        double r36759 = 0.802860764679358;
        bool r36760 = r36747 <= r36759;
        double r36761 = -2;
        double r36762 = 2;
        double r36763 = r36747 / r36762;
        double r36764 = sin(r36763);
        double r36765 = r36750 + r36750;
        double r36766 = r36747 + r36765;
        double r36767 = r36766 / r36762;
        double r36768 = sin(r36767);
        double r36769 = r36764 * r36768;
        double r36770 = r36761 * r36769;
        double r36771 = r36760 ? r36770 : r36758;
        double r36772 = r36749 ? r36758 : r36771;
        return r36772;
}

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 r36773, r36774, r36775, r36776, r36777, r36778;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r36773);
        mpfr_init(r36774);
        mpfr_init(r36775);
        mpfr_init(r36776);
        mpfr_init(r36777);
        mpfr_init(r36778);
}

double f_im(double x, double eps) {
        mpfr_set_d(r36773, x, MPFR_RNDN);
        mpfr_set_d(r36774, eps, MPFR_RNDN);
        mpfr_add(r36775, r36773, r36774, MPFR_RNDN);
        mpfr_cos(r36776, r36775, MPFR_RNDN);
        mpfr_cos(r36777, r36773, MPFR_RNDN);
        mpfr_sub(r36778, r36776, r36777, MPFR_RNDN);
        return mpfr_get_d(r36778, MPFR_RNDN);
}

static mpfr_t r36779, r36780, r36781, r36782, r36783, r36784, r36785, r36786, r36787, r36788, r36789, r36790, r36791, r36792, r36793, r36794, r36795, r36796, r36797, r36798, r36799, r36800, r36801, r36802, r36803, r36804;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r36779);
        mpfr_init_set_str(r36780, "-4.937900603750566e-17", 10, MPFR_RNDN);
        mpfr_init(r36781);
        mpfr_init(r36782);
        mpfr_init(r36783);
        mpfr_init(r36784);
        mpfr_init(r36785);
        mpfr_init(r36786);
        mpfr_init(r36787);
        mpfr_init(r36788);
        mpfr_init(r36789);
        mpfr_init(r36790);
        mpfr_init_set_str(r36791, "0.802860764679358", 10, MPFR_RNDN);
        mpfr_init(r36792);
        mpfr_init_set_str(r36793, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r36794, "2", 10, MPFR_RNDN);
        mpfr_init(r36795);
        mpfr_init(r36796);
        mpfr_init(r36797);
        mpfr_init(r36798);
        mpfr_init(r36799);
        mpfr_init(r36800);
        mpfr_init(r36801);
        mpfr_init(r36802);
        mpfr_init(r36803);
        mpfr_init(r36804);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r36779, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r36781, mpfr_cmp(r36779, r36780) <= 0, MPFR_RNDN);
        mpfr_set_d(r36782, x, MPFR_RNDN);
        mpfr_cos(r36783, r36782, MPFR_RNDN);
        mpfr_cos(r36784, r36779, MPFR_RNDN);
        mpfr_mul(r36785, r36783, r36784, MPFR_RNDN);
        mpfr_sin(r36786, r36782, MPFR_RNDN);
        mpfr_sin(r36787, r36779, MPFR_RNDN);
        mpfr_mul(r36788, r36786, r36787, MPFR_RNDN);
        mpfr_sub(r36789, r36785, r36788, MPFR_RNDN);
        mpfr_sub(r36790, r36789, r36783, MPFR_RNDN);
        ;
        mpfr_set_si(r36792, mpfr_cmp(r36779, r36791) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r36795, r36779, r36794, MPFR_RNDN);
        mpfr_sin(r36796, r36795, MPFR_RNDN);
        mpfr_add(r36797, r36782, r36782, MPFR_RNDN);
        mpfr_add(r36798, r36779, r36797, MPFR_RNDN);
        mpfr_div(r36799, r36798, r36794, MPFR_RNDN);
        mpfr_sin(r36800, r36799, MPFR_RNDN);
        mpfr_mul(r36801, r36796, r36800, MPFR_RNDN);
        mpfr_mul(r36802, r36793, r36801, MPFR_RNDN);
        if (mpfr_get_si(r36792, MPFR_RNDN)) { mpfr_set(r36803, r36802, MPFR_RNDN); } else { mpfr_set(r36803, r36790, MPFR_RNDN); };
        if (mpfr_get_si(r36781, MPFR_RNDN)) { mpfr_set(r36804, r36790, MPFR_RNDN); } else { mpfr_set(r36804, r36803, MPFR_RNDN); };
        return mpfr_get_d(r36804, MPFR_RNDN);
}

static mpfr_t r36805, r36806, r36807, r36808, r36809, r36810, r36811, r36812, r36813, r36814, r36815, r36816, r36817, r36818, r36819, r36820, r36821, r36822, r36823, r36824, r36825, r36826, r36827, r36828, r36829, r36830;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r36805);
        mpfr_init_set_str(r36806, "-4.937900603750566e-17", 10, MPFR_RNDN);
        mpfr_init(r36807);
        mpfr_init(r36808);
        mpfr_init(r36809);
        mpfr_init(r36810);
        mpfr_init(r36811);
        mpfr_init(r36812);
        mpfr_init(r36813);
        mpfr_init(r36814);
        mpfr_init(r36815);
        mpfr_init(r36816);
        mpfr_init_set_str(r36817, "0.802860764679358", 10, MPFR_RNDN);
        mpfr_init(r36818);
        mpfr_init_set_str(r36819, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r36820, "2", 10, MPFR_RNDN);
        mpfr_init(r36821);
        mpfr_init(r36822);
        mpfr_init(r36823);
        mpfr_init(r36824);
        mpfr_init(r36825);
        mpfr_init(r36826);
        mpfr_init(r36827);
        mpfr_init(r36828);
        mpfr_init(r36829);
        mpfr_init(r36830);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r36805, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r36807, mpfr_cmp(r36805, r36806) <= 0, MPFR_RNDN);
        mpfr_set_d(r36808, x, MPFR_RNDN);
        mpfr_cos(r36809, r36808, MPFR_RNDN);
        mpfr_cos(r36810, r36805, MPFR_RNDN);
        mpfr_mul(r36811, r36809, r36810, MPFR_RNDN);
        mpfr_sin(r36812, r36808, MPFR_RNDN);
        mpfr_sin(r36813, r36805, MPFR_RNDN);
        mpfr_mul(r36814, r36812, r36813, MPFR_RNDN);
        mpfr_sub(r36815, r36811, r36814, MPFR_RNDN);
        mpfr_sub(r36816, r36815, r36809, MPFR_RNDN);
        ;
        mpfr_set_si(r36818, mpfr_cmp(r36805, r36817) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r36821, r36805, r36820, MPFR_RNDN);
        mpfr_sin(r36822, r36821, MPFR_RNDN);
        mpfr_add(r36823, r36808, r36808, MPFR_RNDN);
        mpfr_add(r36824, r36805, r36823, MPFR_RNDN);
        mpfr_div(r36825, r36824, r36820, MPFR_RNDN);
        mpfr_sin(r36826, r36825, MPFR_RNDN);
        mpfr_mul(r36827, r36822, r36826, MPFR_RNDN);
        mpfr_mul(r36828, r36819, r36827, MPFR_RNDN);
        if (mpfr_get_si(r36818, MPFR_RNDN)) { mpfr_set(r36829, r36828, MPFR_RNDN); } else { mpfr_set(r36829, r36816, MPFR_RNDN); };
        if (mpfr_get_si(r36807, MPFR_RNDN)) { mpfr_set(r36830, r36816, MPFR_RNDN); } else { mpfr_set(r36830, r36829, MPFR_RNDN); };
        return mpfr_get_d(r36830, MPFR_RNDN);
}

