#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 r19388 = x;
        float r19389 = eps;
        float r19390 = r19388 + r19389;
        float r19391 = cos(r19390);
        float r19392 = cos(r19388);
        float r19393 = r19391 - r19392;
        return r19393;
}

double f_id(double x, double eps) {
        double r19394 = x;
        double r19395 = eps;
        double r19396 = r19394 + r19395;
        double r19397 = cos(r19396);
        double r19398 = cos(r19394);
        double r19399 = r19397 - r19398;
        return r19399;
}


double f_of(float x, float eps) {
        float r19400 = eps;
        float r19401 = -3.9441692661555314e-11f;
        bool r19402 = r19400 <= r19401;
        float r19403 = x;
        float r19404 = cos(r19403);
        float r19405 = cos(r19400);
        float r19406 = r19404 * r19405;
        float r19407 = sin(r19403);
        float r19408 = sin(r19400);
        float r19409 = r19407 * r19408;
        float r19410 = r19409 + r19404;
        float r19411 = r19406 - r19410;
        float r19412 = 1850694803779224.5f;
        bool r19413 = r19400 <= r19412;
        float r19414 = -2.0f;
        float r19415 = 2.0f;
        float r19416 = r19400 / r19415;
        float r19417 = sin(r19416);
        float r19418 = r19403 + r19403;
        float r19419 = r19400 + r19418;
        float r19420 = r19419 / r19415;
        float r19421 = sin(r19420);
        float r19422 = cbrt(r19421);
        float r19423 = r19422 * r19422;
        float r19424 = r19417 * r19423;
        float r19425 = r19424 * r19422;
        float r19426 = r19414 * r19425;
        float r19427 = r19406 - r19409;
        float r19428 = r19427 - r19404;
        float r19429 = r19413 ? r19426 : r19428;
        float r19430 = r19402 ? r19411 : r19429;
        return r19430;
}

double f_od(double x, double eps) {
        double r19431 = eps;
        double r19432 = -3.9441692661555314e-11;
        bool r19433 = r19431 <= r19432;
        double r19434 = x;
        double r19435 = cos(r19434);
        double r19436 = cos(r19431);
        double r19437 = r19435 * r19436;
        double r19438 = sin(r19434);
        double r19439 = sin(r19431);
        double r19440 = r19438 * r19439;
        double r19441 = r19440 + r19435;
        double r19442 = r19437 - r19441;
        double r19443 = 1850694803779224.5;
        bool r19444 = r19431 <= r19443;
        double r19445 = -2.0;
        double r19446 = 2.0;
        double r19447 = r19431 / r19446;
        double r19448 = sin(r19447);
        double r19449 = r19434 + r19434;
        double r19450 = r19431 + r19449;
        double r19451 = r19450 / r19446;
        double r19452 = sin(r19451);
        double r19453 = cbrt(r19452);
        double r19454 = r19453 * r19453;
        double r19455 = r19448 * r19454;
        double r19456 = r19455 * r19453;
        double r19457 = r19445 * r19456;
        double r19458 = r19437 - r19440;
        double r19459 = r19458 - r19435;
        double r19460 = r19444 ? r19457 : r19459;
        double r19461 = r19433 ? r19442 : r19460;
        return r19461;
}

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 r19462, r19463, r19464, r19465, r19466, r19467;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19462);
        mpfr_init(r19463);
        mpfr_init(r19464);
        mpfr_init(r19465);
        mpfr_init(r19466);
        mpfr_init(r19467);
}

double f_im(double x, double eps) {
        mpfr_set_d(r19462, x, MPFR_RNDN);
        mpfr_set_d(r19463, eps, MPFR_RNDN);
        mpfr_add(r19464, r19462, r19463, MPFR_RNDN);
        mpfr_cos(r19465, r19464, MPFR_RNDN);
        mpfr_cos(r19466, r19462, MPFR_RNDN);
        mpfr_sub(r19467, r19465, r19466, MPFR_RNDN);
        return mpfr_get_d(r19467, MPFR_RNDN);
}

static mpfr_t r19468, r19469, r19470, r19471, r19472, r19473, r19474, r19475, r19476, r19477, r19478, r19479, r19480, r19481, r19482, r19483, r19484, r19485, r19486, r19487, r19488, r19489, r19490, r19491, r19492, r19493, r19494, r19495, r19496, r19497, r19498;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19468);
        mpfr_init_set_str(r19469, "-3.9441692661555314e-11", 10, MPFR_RNDN);
        mpfr_init(r19470);
        mpfr_init(r19471);
        mpfr_init(r19472);
        mpfr_init(r19473);
        mpfr_init(r19474);
        mpfr_init(r19475);
        mpfr_init(r19476);
        mpfr_init(r19477);
        mpfr_init(r19478);
        mpfr_init(r19479);
        mpfr_init_set_str(r19480, "1850694803779224.5", 10, MPFR_RNDN);
        mpfr_init(r19481);
        mpfr_init_set_str(r19482, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r19483, "2", 10, MPFR_RNDN);
        mpfr_init(r19484);
        mpfr_init(r19485);
        mpfr_init(r19486);
        mpfr_init(r19487);
        mpfr_init(r19488);
        mpfr_init(r19489);
        mpfr_init(r19490);
        mpfr_init(r19491);
        mpfr_init(r19492);
        mpfr_init(r19493);
        mpfr_init(r19494);
        mpfr_init(r19495);
        mpfr_init(r19496);
        mpfr_init(r19497);
        mpfr_init(r19498);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r19468, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r19470, mpfr_cmp(r19468, r19469) <= 0, MPFR_RNDN);
        mpfr_set_d(r19471, x, MPFR_RNDN);
        mpfr_cos(r19472, r19471, MPFR_RNDN);
        mpfr_cos(r19473, r19468, MPFR_RNDN);
        mpfr_mul(r19474, r19472, r19473, MPFR_RNDN);
        mpfr_sin(r19475, r19471, MPFR_RNDN);
        mpfr_sin(r19476, r19468, MPFR_RNDN);
        mpfr_mul(r19477, r19475, r19476, MPFR_RNDN);
        mpfr_add(r19478, r19477, r19472, MPFR_RNDN);
        mpfr_sub(r19479, r19474, r19478, MPFR_RNDN);
        ;
        mpfr_set_si(r19481, mpfr_cmp(r19468, r19480) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r19484, r19468, r19483, MPFR_RNDN);
        mpfr_sin(r19485, r19484, MPFR_RNDN);
        mpfr_add(r19486, r19471, r19471, MPFR_RNDN);
        mpfr_add(r19487, r19468, r19486, MPFR_RNDN);
        mpfr_div(r19488, r19487, r19483, MPFR_RNDN);
        mpfr_sin(r19489, r19488, MPFR_RNDN);
        mpfr_cbrt(r19490, r19489, MPFR_RNDN);
        mpfr_mul(r19491, r19490, r19490, MPFR_RNDN);
        mpfr_mul(r19492, r19485, r19491, MPFR_RNDN);
        mpfr_mul(r19493, r19492, r19490, MPFR_RNDN);
        mpfr_mul(r19494, r19482, r19493, MPFR_RNDN);
        mpfr_sub(r19495, r19474, r19477, MPFR_RNDN);
        mpfr_sub(r19496, r19495, r19472, MPFR_RNDN);
        if (mpfr_get_si(r19481, MPFR_RNDN)) { mpfr_set(r19497, r19494, MPFR_RNDN); } else { mpfr_set(r19497, r19496, MPFR_RNDN); };
        if (mpfr_get_si(r19470, MPFR_RNDN)) { mpfr_set(r19498, r19479, MPFR_RNDN); } else { mpfr_set(r19498, r19497, MPFR_RNDN); };
        return mpfr_get_d(r19498, MPFR_RNDN);
}

static mpfr_t r19499, r19500, r19501, r19502, r19503, r19504, r19505, r19506, r19507, r19508, r19509, r19510, r19511, r19512, r19513, r19514, r19515, r19516, r19517, r19518, r19519, r19520, r19521, r19522, r19523, r19524, r19525, r19526, r19527, r19528, r19529;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19499);
        mpfr_init_set_str(r19500, "-3.9441692661555314e-11", 10, MPFR_RNDN);
        mpfr_init(r19501);
        mpfr_init(r19502);
        mpfr_init(r19503);
        mpfr_init(r19504);
        mpfr_init(r19505);
        mpfr_init(r19506);
        mpfr_init(r19507);
        mpfr_init(r19508);
        mpfr_init(r19509);
        mpfr_init(r19510);
        mpfr_init_set_str(r19511, "1850694803779224.5", 10, MPFR_RNDN);
        mpfr_init(r19512);
        mpfr_init_set_str(r19513, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r19514, "2", 10, MPFR_RNDN);
        mpfr_init(r19515);
        mpfr_init(r19516);
        mpfr_init(r19517);
        mpfr_init(r19518);
        mpfr_init(r19519);
        mpfr_init(r19520);
        mpfr_init(r19521);
        mpfr_init(r19522);
        mpfr_init(r19523);
        mpfr_init(r19524);
        mpfr_init(r19525);
        mpfr_init(r19526);
        mpfr_init(r19527);
        mpfr_init(r19528);
        mpfr_init(r19529);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r19499, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r19501, mpfr_cmp(r19499, r19500) <= 0, MPFR_RNDN);
        mpfr_set_d(r19502, x, MPFR_RNDN);
        mpfr_cos(r19503, r19502, MPFR_RNDN);
        mpfr_cos(r19504, r19499, MPFR_RNDN);
        mpfr_mul(r19505, r19503, r19504, MPFR_RNDN);
        mpfr_sin(r19506, r19502, MPFR_RNDN);
        mpfr_sin(r19507, r19499, MPFR_RNDN);
        mpfr_mul(r19508, r19506, r19507, MPFR_RNDN);
        mpfr_add(r19509, r19508, r19503, MPFR_RNDN);
        mpfr_sub(r19510, r19505, r19509, MPFR_RNDN);
        ;
        mpfr_set_si(r19512, mpfr_cmp(r19499, r19511) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r19515, r19499, r19514, MPFR_RNDN);
        mpfr_sin(r19516, r19515, MPFR_RNDN);
        mpfr_add(r19517, r19502, r19502, MPFR_RNDN);
        mpfr_add(r19518, r19499, r19517, MPFR_RNDN);
        mpfr_div(r19519, r19518, r19514, MPFR_RNDN);
        mpfr_sin(r19520, r19519, MPFR_RNDN);
        mpfr_cbrt(r19521, r19520, MPFR_RNDN);
        mpfr_mul(r19522, r19521, r19521, MPFR_RNDN);
        mpfr_mul(r19523, r19516, r19522, MPFR_RNDN);
        mpfr_mul(r19524, r19523, r19521, MPFR_RNDN);
        mpfr_mul(r19525, r19513, r19524, MPFR_RNDN);
        mpfr_sub(r19526, r19505, r19508, MPFR_RNDN);
        mpfr_sub(r19527, r19526, r19503, MPFR_RNDN);
        if (mpfr_get_si(r19512, MPFR_RNDN)) { mpfr_set(r19528, r19525, MPFR_RNDN); } else { mpfr_set(r19528, r19527, MPFR_RNDN); };
        if (mpfr_get_si(r19501, MPFR_RNDN)) { mpfr_set(r19529, r19510, MPFR_RNDN); } else { mpfr_set(r19529, r19528, MPFR_RNDN); };
        return mpfr_get_d(r19529, MPFR_RNDN);
}

