#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 r6237585 = x;
        float r6237586 = eps;
        float r6237587 = r6237585 + r6237586;
        float r6237588 = cos(r6237587);
        float r6237589 = cos(r6237585);
        float r6237590 = r6237588 - r6237589;
        return r6237590;
}

double f_id(double x, double eps) {
        double r6237591 = x;
        double r6237592 = eps;
        double r6237593 = r6237591 + r6237592;
        double r6237594 = cos(r6237593);
        double r6237595 = cos(r6237591);
        double r6237596 = r6237594 - r6237595;
        return r6237596;
}


double f_of(float x, float eps) {
        float r6237597 = eps;
        float r6237598 = -1.271828634017979e-05;
        bool r6237599 = r6237597 <= r6237598;
        float r6237600 = x;
        float r6237601 = cos(r6237600);
        float r6237602 = cos(r6237597);
        float r6237603 = r6237601 * r6237602;
        float r6237604 = sin(r6237600);
        float r6237605 = sin(r6237597);
        float r6237606 = r6237604 * r6237605;
        float r6237607 = r6237603 - r6237606;
        float r6237608 = r6237607 - r6237601;
        float r6237609 = 2.323691004689178e-05;
        bool r6237610 = r6237597 <= r6237609;
        float r6237611 = -2;
        float r6237612 = 2;
        float r6237613 = r6237597 / r6237612;
        float r6237614 = sin(r6237613);
        float r6237615 = r6237611 * r6237614;
        float r6237616 = r6237600 + r6237600;
        float r6237617 = r6237597 + r6237616;
        float r6237618 = r6237617 / r6237612;
        float r6237619 = sin(r6237618);
        float r6237620 = r6237615 * r6237619;
        float r6237621 = r6237610 ? r6237620 : r6237608;
        float r6237622 = r6237599 ? r6237608 : r6237621;
        return r6237622;
}

double f_od(double x, double eps) {
        double r6237623 = eps;
        double r6237624 = -1.271828634017979e-05;
        bool r6237625 = r6237623 <= r6237624;
        double r6237626 = x;
        double r6237627 = cos(r6237626);
        double r6237628 = cos(r6237623);
        double r6237629 = r6237627 * r6237628;
        double r6237630 = sin(r6237626);
        double r6237631 = sin(r6237623);
        double r6237632 = r6237630 * r6237631;
        double r6237633 = r6237629 - r6237632;
        double r6237634 = r6237633 - r6237627;
        double r6237635 = 2.323691004689178e-05;
        bool r6237636 = r6237623 <= r6237635;
        double r6237637 = -2;
        double r6237638 = 2;
        double r6237639 = r6237623 / r6237638;
        double r6237640 = sin(r6237639);
        double r6237641 = r6237637 * r6237640;
        double r6237642 = r6237626 + r6237626;
        double r6237643 = r6237623 + r6237642;
        double r6237644 = r6237643 / r6237638;
        double r6237645 = sin(r6237644);
        double r6237646 = r6237641 * r6237645;
        double r6237647 = r6237636 ? r6237646 : r6237634;
        double r6237648 = r6237625 ? r6237634 : r6237647;
        return r6237648;
}

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 r6237649, r6237650, r6237651, r6237652, r6237653, r6237654;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r6237649);
        mpfr_init(r6237650);
        mpfr_init(r6237651);
        mpfr_init(r6237652);
        mpfr_init(r6237653);
        mpfr_init(r6237654);
}

double f_im(double x, double eps) {
        mpfr_set_d(r6237649, x, MPFR_RNDN);
        mpfr_set_d(r6237650, eps, MPFR_RNDN);
        mpfr_add(r6237651, r6237649, r6237650, MPFR_RNDN);
        mpfr_cos(r6237652, r6237651, MPFR_RNDN);
        mpfr_cos(r6237653, r6237649, MPFR_RNDN);
        mpfr_sub(r6237654, r6237652, r6237653, MPFR_RNDN);
        return mpfr_get_d(r6237654, MPFR_RNDN);
}

static mpfr_t r6237655, r6237656, r6237657, r6237658, r6237659, r6237660, r6237661, r6237662, r6237663, r6237664, r6237665, r6237666, r6237667, r6237668, r6237669, r6237670, r6237671, r6237672, r6237673, r6237674, r6237675, r6237676, r6237677, r6237678, r6237679, r6237680;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r6237655);
        mpfr_init_set_str(r6237656, "-1.271828634017979e-05", 10, MPFR_RNDN);
        mpfr_init(r6237657);
        mpfr_init(r6237658);
        mpfr_init(r6237659);
        mpfr_init(r6237660);
        mpfr_init(r6237661);
        mpfr_init(r6237662);
        mpfr_init(r6237663);
        mpfr_init(r6237664);
        mpfr_init(r6237665);
        mpfr_init(r6237666);
        mpfr_init_set_str(r6237667, "2.323691004689178e-05", 10, MPFR_RNDN);
        mpfr_init(r6237668);
        mpfr_init_set_str(r6237669, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r6237670, "2", 10, MPFR_RNDN);
        mpfr_init(r6237671);
        mpfr_init(r6237672);
        mpfr_init(r6237673);
        mpfr_init(r6237674);
        mpfr_init(r6237675);
        mpfr_init(r6237676);
        mpfr_init(r6237677);
        mpfr_init(r6237678);
        mpfr_init(r6237679);
        mpfr_init(r6237680);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r6237655, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r6237657, mpfr_cmp(r6237655, r6237656) <= 0, MPFR_RNDN);
        mpfr_set_d(r6237658, x, MPFR_RNDN);
        mpfr_cos(r6237659, r6237658, MPFR_RNDN);
        mpfr_cos(r6237660, r6237655, MPFR_RNDN);
        mpfr_mul(r6237661, r6237659, r6237660, MPFR_RNDN);
        mpfr_sin(r6237662, r6237658, MPFR_RNDN);
        mpfr_sin(r6237663, r6237655, MPFR_RNDN);
        mpfr_mul(r6237664, r6237662, r6237663, MPFR_RNDN);
        mpfr_sub(r6237665, r6237661, r6237664, MPFR_RNDN);
        mpfr_sub(r6237666, r6237665, r6237659, MPFR_RNDN);
        ;
        mpfr_set_si(r6237668, mpfr_cmp(r6237655, r6237667) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r6237671, r6237655, r6237670, MPFR_RNDN);
        mpfr_sin(r6237672, r6237671, MPFR_RNDN);
        mpfr_mul(r6237673, r6237669, r6237672, MPFR_RNDN);
        mpfr_add(r6237674, r6237658, r6237658, MPFR_RNDN);
        mpfr_add(r6237675, r6237655, r6237674, MPFR_RNDN);
        mpfr_div(r6237676, r6237675, r6237670, MPFR_RNDN);
        mpfr_sin(r6237677, r6237676, MPFR_RNDN);
        mpfr_mul(r6237678, r6237673, r6237677, MPFR_RNDN);
        if (mpfr_get_si(r6237668, MPFR_RNDN)) { mpfr_set(r6237679, r6237678, MPFR_RNDN); } else { mpfr_set(r6237679, r6237666, MPFR_RNDN); };
        if (mpfr_get_si(r6237657, MPFR_RNDN)) { mpfr_set(r6237680, r6237666, MPFR_RNDN); } else { mpfr_set(r6237680, r6237679, MPFR_RNDN); };
        return mpfr_get_d(r6237680, MPFR_RNDN);
}

static mpfr_t r6237681, r6237682, r6237683, r6237684, r6237685, r6237686, r6237687, r6237688, r6237689, r6237690, r6237691, r6237692, r6237693, r6237694, r6237695, r6237696, r6237697, r6237698, r6237699, r6237700, r6237701, r6237702, r6237703, r6237704, r6237705, r6237706;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r6237681);
        mpfr_init_set_str(r6237682, "-1.271828634017979e-05", 10, MPFR_RNDN);
        mpfr_init(r6237683);
        mpfr_init(r6237684);
        mpfr_init(r6237685);
        mpfr_init(r6237686);
        mpfr_init(r6237687);
        mpfr_init(r6237688);
        mpfr_init(r6237689);
        mpfr_init(r6237690);
        mpfr_init(r6237691);
        mpfr_init(r6237692);
        mpfr_init_set_str(r6237693, "2.323691004689178e-05", 10, MPFR_RNDN);
        mpfr_init(r6237694);
        mpfr_init_set_str(r6237695, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r6237696, "2", 10, MPFR_RNDN);
        mpfr_init(r6237697);
        mpfr_init(r6237698);
        mpfr_init(r6237699);
        mpfr_init(r6237700);
        mpfr_init(r6237701);
        mpfr_init(r6237702);
        mpfr_init(r6237703);
        mpfr_init(r6237704);
        mpfr_init(r6237705);
        mpfr_init(r6237706);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r6237681, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r6237683, mpfr_cmp(r6237681, r6237682) <= 0, MPFR_RNDN);
        mpfr_set_d(r6237684, x, MPFR_RNDN);
        mpfr_cos(r6237685, r6237684, MPFR_RNDN);
        mpfr_cos(r6237686, r6237681, MPFR_RNDN);
        mpfr_mul(r6237687, r6237685, r6237686, MPFR_RNDN);
        mpfr_sin(r6237688, r6237684, MPFR_RNDN);
        mpfr_sin(r6237689, r6237681, MPFR_RNDN);
        mpfr_mul(r6237690, r6237688, r6237689, MPFR_RNDN);
        mpfr_sub(r6237691, r6237687, r6237690, MPFR_RNDN);
        mpfr_sub(r6237692, r6237691, r6237685, MPFR_RNDN);
        ;
        mpfr_set_si(r6237694, mpfr_cmp(r6237681, r6237693) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r6237697, r6237681, r6237696, MPFR_RNDN);
        mpfr_sin(r6237698, r6237697, MPFR_RNDN);
        mpfr_mul(r6237699, r6237695, r6237698, MPFR_RNDN);
        mpfr_add(r6237700, r6237684, r6237684, MPFR_RNDN);
        mpfr_add(r6237701, r6237681, r6237700, MPFR_RNDN);
        mpfr_div(r6237702, r6237701, r6237696, MPFR_RNDN);
        mpfr_sin(r6237703, r6237702, MPFR_RNDN);
        mpfr_mul(r6237704, r6237699, r6237703, MPFR_RNDN);
        if (mpfr_get_si(r6237694, MPFR_RNDN)) { mpfr_set(r6237705, r6237704, MPFR_RNDN); } else { mpfr_set(r6237705, r6237692, MPFR_RNDN); };
        if (mpfr_get_si(r6237683, MPFR_RNDN)) { mpfr_set(r6237706, r6237692, MPFR_RNDN); } else { mpfr_set(r6237706, r6237705, MPFR_RNDN); };
        return mpfr_get_d(r6237706, MPFR_RNDN);
}

