#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 r21430 = x;
        float r21431 = eps;
        float r21432 = r21430 + r21431;
        float r21433 = cos(r21432);
        float r21434 = cos(r21430);
        float r21435 = r21433 - r21434;
        return r21435;
}

double f_id(double x, double eps) {
        double r21436 = x;
        double r21437 = eps;
        double r21438 = r21436 + r21437;
        double r21439 = cos(r21438);
        double r21440 = cos(r21436);
        double r21441 = r21439 - r21440;
        return r21441;
}


double f_of(float x, float eps) {
        float r21442 = x;
        float r21443 = cos(r21442);
        float r21444 = eps;
        float r21445 = cos(r21444);
        float r21446 = r21443 * r21445;
        float r21447 = sin(r21442);
        float r21448 = sin(r21444);
        float r21449 = r21447 * r21448;
        float r21450 = r21446 - r21449;
        float r21451 = r21450 - r21443;
        float r21452 = -0.023980124914600554;
        bool r21453 = r21451 <= r21452;
        float r21454 = 3.5240413379100666e-08;
        bool r21455 = r21451 <= r21454;
        float r21456 = -2;
        float r21457 = 2;
        float r21458 = r21444 / r21457;
        float r21459 = sin(r21458);
        float r21460 = fma(r21457, r21442, r21444);
        float r21461 = r21460 / r21457;
        float r21462 = sin(r21461);
        float r21463 = log1p(r21462);
        float r21464 = expm1(r21463);
        float r21465 = r21459 * r21464;
        float r21466 = r21456 * r21465;
        float r21467 = r21455 ? r21466 : r21451;
        float r21468 = r21453 ? r21451 : r21467;
        return r21468;
}

double f_od(double x, double eps) {
        double r21469 = x;
        double r21470 = cos(r21469);
        double r21471 = eps;
        double r21472 = cos(r21471);
        double r21473 = r21470 * r21472;
        double r21474 = sin(r21469);
        double r21475 = sin(r21471);
        double r21476 = r21474 * r21475;
        double r21477 = r21473 - r21476;
        double r21478 = r21477 - r21470;
        double r21479 = -0.023980124914600554;
        bool r21480 = r21478 <= r21479;
        double r21481 = 3.5240413379100666e-08;
        bool r21482 = r21478 <= r21481;
        double r21483 = -2;
        double r21484 = 2;
        double r21485 = r21471 / r21484;
        double r21486 = sin(r21485);
        double r21487 = fma(r21484, r21469, r21471);
        double r21488 = r21487 / r21484;
        double r21489 = sin(r21488);
        double r21490 = log1p(r21489);
        double r21491 = expm1(r21490);
        double r21492 = r21486 * r21491;
        double r21493 = r21483 * r21492;
        double r21494 = r21482 ? r21493 : r21478;
        double r21495 = r21480 ? r21478 : r21494;
        return r21495;
}

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 r21496, r21497, r21498, r21499, r21500, r21501;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r21496);
        mpfr_init(r21497);
        mpfr_init(r21498);
        mpfr_init(r21499);
        mpfr_init(r21500);
        mpfr_init(r21501);
}

double f_im(double x, double eps) {
        mpfr_set_d(r21496, x, MPFR_RNDN);
        mpfr_set_d(r21497, eps, MPFR_RNDN);
        mpfr_add(r21498, r21496, r21497, MPFR_RNDN);
        mpfr_cos(r21499, r21498, MPFR_RNDN);
        mpfr_cos(r21500, r21496, MPFR_RNDN);
        mpfr_sub(r21501, r21499, r21500, MPFR_RNDN);
        return mpfr_get_d(r21501, MPFR_RNDN);
}

static mpfr_t r21502, r21503, r21504, r21505, r21506, r21507, r21508, r21509, r21510, r21511, r21512, r21513, r21514, r21515, r21516, r21517, r21518, r21519, r21520, r21521, r21522, r21523, r21524, r21525, r21526, r21527, r21528;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r21502);
        mpfr_init(r21503);
        mpfr_init(r21504);
        mpfr_init(r21505);
        mpfr_init(r21506);
        mpfr_init(r21507);
        mpfr_init(r21508);
        mpfr_init(r21509);
        mpfr_init(r21510);
        mpfr_init(r21511);
        mpfr_init_set_str(r21512, "-0.023980124914600554", 10, MPFR_RNDN);
        mpfr_init(r21513);
        mpfr_init_set_str(r21514, "3.5240413379100666e-08", 10, MPFR_RNDN);
        mpfr_init(r21515);
        mpfr_init_set_str(r21516, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r21517, "2", 10, MPFR_RNDN);
        mpfr_init(r21518);
        mpfr_init(r21519);
        mpfr_init(r21520);
        mpfr_init(r21521);
        mpfr_init(r21522);
        mpfr_init(r21523);
        mpfr_init(r21524);
        mpfr_init(r21525);
        mpfr_init(r21526);
        mpfr_init(r21527);
        mpfr_init(r21528);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r21502, x, MPFR_RNDN);
        mpfr_cos(r21503, r21502, MPFR_RNDN);
        mpfr_set_d(r21504, eps, MPFR_RNDN);
        mpfr_cos(r21505, r21504, MPFR_RNDN);
        mpfr_mul(r21506, r21503, r21505, MPFR_RNDN);
        mpfr_sin(r21507, r21502, MPFR_RNDN);
        mpfr_sin(r21508, r21504, MPFR_RNDN);
        mpfr_mul(r21509, r21507, r21508, MPFR_RNDN);
        mpfr_sub(r21510, r21506, r21509, MPFR_RNDN);
        mpfr_sub(r21511, r21510, r21503, MPFR_RNDN);
        ;
        mpfr_set_si(r21513, mpfr_cmp(r21511, r21512) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r21515, mpfr_cmp(r21511, r21514) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r21518, r21504, r21517, MPFR_RNDN);
        mpfr_sin(r21519, r21518, MPFR_RNDN);
        mpfr_fma(r21520, r21517, r21502, r21504, MPFR_RNDN);
        mpfr_div(r21521, r21520, r21517, MPFR_RNDN);
        mpfr_sin(r21522, r21521, MPFR_RNDN);
        mpfr_log1p(r21523, r21522, MPFR_RNDN);
        mpfr_expm1(r21524, r21523, MPFR_RNDN);
        mpfr_mul(r21525, r21519, r21524, MPFR_RNDN);
        mpfr_mul(r21526, r21516, r21525, MPFR_RNDN);
        if (mpfr_get_si(r21515, MPFR_RNDN)) { mpfr_set(r21527, r21526, MPFR_RNDN); } else { mpfr_set(r21527, r21511, MPFR_RNDN); };
        if (mpfr_get_si(r21513, MPFR_RNDN)) { mpfr_set(r21528, r21511, MPFR_RNDN); } else { mpfr_set(r21528, r21527, MPFR_RNDN); };
        return mpfr_get_d(r21528, MPFR_RNDN);
}

static mpfr_t r21529, r21530, r21531, r21532, r21533, r21534, r21535, r21536, r21537, r21538, r21539, r21540, r21541, r21542, r21543, r21544, r21545, r21546, r21547, r21548, r21549, r21550, r21551, r21552, r21553, r21554, r21555;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r21529);
        mpfr_init(r21530);
        mpfr_init(r21531);
        mpfr_init(r21532);
        mpfr_init(r21533);
        mpfr_init(r21534);
        mpfr_init(r21535);
        mpfr_init(r21536);
        mpfr_init(r21537);
        mpfr_init(r21538);
        mpfr_init_set_str(r21539, "-0.023980124914600554", 10, MPFR_RNDN);
        mpfr_init(r21540);
        mpfr_init_set_str(r21541, "3.5240413379100666e-08", 10, MPFR_RNDN);
        mpfr_init(r21542);
        mpfr_init_set_str(r21543, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r21544, "2", 10, MPFR_RNDN);
        mpfr_init(r21545);
        mpfr_init(r21546);
        mpfr_init(r21547);
        mpfr_init(r21548);
        mpfr_init(r21549);
        mpfr_init(r21550);
        mpfr_init(r21551);
        mpfr_init(r21552);
        mpfr_init(r21553);
        mpfr_init(r21554);
        mpfr_init(r21555);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r21529, x, MPFR_RNDN);
        mpfr_cos(r21530, r21529, MPFR_RNDN);
        mpfr_set_d(r21531, eps, MPFR_RNDN);
        mpfr_cos(r21532, r21531, MPFR_RNDN);
        mpfr_mul(r21533, r21530, r21532, MPFR_RNDN);
        mpfr_sin(r21534, r21529, MPFR_RNDN);
        mpfr_sin(r21535, r21531, MPFR_RNDN);
        mpfr_mul(r21536, r21534, r21535, MPFR_RNDN);
        mpfr_sub(r21537, r21533, r21536, MPFR_RNDN);
        mpfr_sub(r21538, r21537, r21530, MPFR_RNDN);
        ;
        mpfr_set_si(r21540, mpfr_cmp(r21538, r21539) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r21542, mpfr_cmp(r21538, r21541) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r21545, r21531, r21544, MPFR_RNDN);
        mpfr_sin(r21546, r21545, MPFR_RNDN);
        mpfr_fma(r21547, r21544, r21529, r21531, MPFR_RNDN);
        mpfr_div(r21548, r21547, r21544, MPFR_RNDN);
        mpfr_sin(r21549, r21548, MPFR_RNDN);
        mpfr_log1p(r21550, r21549, MPFR_RNDN);
        mpfr_expm1(r21551, r21550, MPFR_RNDN);
        mpfr_mul(r21552, r21546, r21551, MPFR_RNDN);
        mpfr_mul(r21553, r21543, r21552, MPFR_RNDN);
        if (mpfr_get_si(r21542, MPFR_RNDN)) { mpfr_set(r21554, r21553, MPFR_RNDN); } else { mpfr_set(r21554, r21538, MPFR_RNDN); };
        if (mpfr_get_si(r21540, MPFR_RNDN)) { mpfr_set(r21555, r21538, MPFR_RNDN); } else { mpfr_set(r21555, r21554, MPFR_RNDN); };
        return mpfr_get_d(r21555, MPFR_RNDN);
}

