#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 r37254 = x;
        float r37255 = eps;
        float r37256 = r37254 + r37255;
        float r37257 = cos(r37256);
        float r37258 = cos(r37254);
        float r37259 = r37257 - r37258;
        return r37259;
}

double f_id(double x, double eps) {
        double r37260 = x;
        double r37261 = eps;
        double r37262 = r37260 + r37261;
        double r37263 = cos(r37262);
        double r37264 = cos(r37260);
        double r37265 = r37263 - r37264;
        return r37265;
}


double f_of(float x, float eps) {
        float r37266 = eps;
        float r37267 = -0.00013580674868090203;
        bool r37268 = r37266 <= r37267;
        float r37269 = x;
        float r37270 = cos(r37269);
        float r37271 = cos(r37266);
        float r37272 = r37270 * r37271;
        float r37273 = sin(r37269);
        float r37274 = sin(r37266);
        float r37275 = r37273 * r37274;
        float r37276 = r37272 - r37275;
        float r37277 = r37276 - r37270;
        float r37278 = 0.00039206272042066707;
        bool r37279 = r37266 <= r37278;
        float r37280 = -2;
        float r37281 = 2;
        float r37282 = r37266 / r37281;
        float r37283 = sin(r37282);
        float r37284 = r37269 + r37269;
        float r37285 = r37266 + r37284;
        float r37286 = r37285 / r37281;
        float r37287 = sin(r37286);
        float r37288 = r37283 * r37287;
        float r37289 = r37280 * r37288;
        float r37290 = r37279 ? r37289 : r37277;
        float r37291 = r37268 ? r37277 : r37290;
        return r37291;
}

double f_od(double x, double eps) {
        double r37292 = eps;
        double r37293 = -0.00013580674868090203;
        bool r37294 = r37292 <= r37293;
        double r37295 = x;
        double r37296 = cos(r37295);
        double r37297 = cos(r37292);
        double r37298 = r37296 * r37297;
        double r37299 = sin(r37295);
        double r37300 = sin(r37292);
        double r37301 = r37299 * r37300;
        double r37302 = r37298 - r37301;
        double r37303 = r37302 - r37296;
        double r37304 = 0.00039206272042066707;
        bool r37305 = r37292 <= r37304;
        double r37306 = -2;
        double r37307 = 2;
        double r37308 = r37292 / r37307;
        double r37309 = sin(r37308);
        double r37310 = r37295 + r37295;
        double r37311 = r37292 + r37310;
        double r37312 = r37311 / r37307;
        double r37313 = sin(r37312);
        double r37314 = r37309 * r37313;
        double r37315 = r37306 * r37314;
        double r37316 = r37305 ? r37315 : r37303;
        double r37317 = r37294 ? r37303 : r37316;
        return r37317;
}

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 r37318, r37319, r37320, r37321, r37322, r37323;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37318);
        mpfr_init(r37319);
        mpfr_init(r37320);
        mpfr_init(r37321);
        mpfr_init(r37322);
        mpfr_init(r37323);
}

double f_im(double x, double eps) {
        mpfr_set_d(r37318, x, MPFR_RNDN);
        mpfr_set_d(r37319, eps, MPFR_RNDN);
        mpfr_add(r37320, r37318, r37319, MPFR_RNDN);
        mpfr_cos(r37321, r37320, MPFR_RNDN);
        mpfr_cos(r37322, r37318, MPFR_RNDN);
        mpfr_sub(r37323, r37321, r37322, MPFR_RNDN);
        return mpfr_get_d(r37323, MPFR_RNDN);
}

static mpfr_t r37324, r37325, r37326, r37327, r37328, r37329, r37330, r37331, r37332, r37333, r37334, r37335, r37336, r37337, r37338, r37339, r37340, r37341, r37342, r37343, r37344, r37345, r37346, r37347, r37348, r37349;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37324);
        mpfr_init_set_str(r37325, "-0.00013580674868090203", 10, MPFR_RNDN);
        mpfr_init(r37326);
        mpfr_init(r37327);
        mpfr_init(r37328);
        mpfr_init(r37329);
        mpfr_init(r37330);
        mpfr_init(r37331);
        mpfr_init(r37332);
        mpfr_init(r37333);
        mpfr_init(r37334);
        mpfr_init(r37335);
        mpfr_init_set_str(r37336, "0.00039206272042066707", 10, MPFR_RNDN);
        mpfr_init(r37337);
        mpfr_init_set_str(r37338, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r37339, "2", 10, MPFR_RNDN);
        mpfr_init(r37340);
        mpfr_init(r37341);
        mpfr_init(r37342);
        mpfr_init(r37343);
        mpfr_init(r37344);
        mpfr_init(r37345);
        mpfr_init(r37346);
        mpfr_init(r37347);
        mpfr_init(r37348);
        mpfr_init(r37349);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r37324, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r37326, mpfr_cmp(r37324, r37325) <= 0, MPFR_RNDN);
        mpfr_set_d(r37327, x, MPFR_RNDN);
        mpfr_cos(r37328, r37327, MPFR_RNDN);
        mpfr_cos(r37329, r37324, MPFR_RNDN);
        mpfr_mul(r37330, r37328, r37329, MPFR_RNDN);
        mpfr_sin(r37331, r37327, MPFR_RNDN);
        mpfr_sin(r37332, r37324, MPFR_RNDN);
        mpfr_mul(r37333, r37331, r37332, MPFR_RNDN);
        mpfr_sub(r37334, r37330, r37333, MPFR_RNDN);
        mpfr_sub(r37335, r37334, r37328, MPFR_RNDN);
        ;
        mpfr_set_si(r37337, mpfr_cmp(r37324, r37336) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r37340, r37324, r37339, MPFR_RNDN);
        mpfr_sin(r37341, r37340, MPFR_RNDN);
        mpfr_add(r37342, r37327, r37327, MPFR_RNDN);
        mpfr_add(r37343, r37324, r37342, MPFR_RNDN);
        mpfr_div(r37344, r37343, r37339, MPFR_RNDN);
        mpfr_sin(r37345, r37344, MPFR_RNDN);
        mpfr_mul(r37346, r37341, r37345, MPFR_RNDN);
        mpfr_mul(r37347, r37338, r37346, MPFR_RNDN);
        if (mpfr_get_si(r37337, MPFR_RNDN)) { mpfr_set(r37348, r37347, MPFR_RNDN); } else { mpfr_set(r37348, r37335, MPFR_RNDN); };
        if (mpfr_get_si(r37326, MPFR_RNDN)) { mpfr_set(r37349, r37335, MPFR_RNDN); } else { mpfr_set(r37349, r37348, MPFR_RNDN); };
        return mpfr_get_d(r37349, MPFR_RNDN);
}

static mpfr_t r37350, r37351, r37352, r37353, r37354, r37355, r37356, r37357, r37358, r37359, r37360, r37361, r37362, r37363, r37364, r37365, r37366, r37367, r37368, r37369, r37370, r37371, r37372, r37373, r37374, r37375;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37350);
        mpfr_init_set_str(r37351, "-0.00013580674868090203", 10, MPFR_RNDN);
        mpfr_init(r37352);
        mpfr_init(r37353);
        mpfr_init(r37354);
        mpfr_init(r37355);
        mpfr_init(r37356);
        mpfr_init(r37357);
        mpfr_init(r37358);
        mpfr_init(r37359);
        mpfr_init(r37360);
        mpfr_init(r37361);
        mpfr_init_set_str(r37362, "0.00039206272042066707", 10, MPFR_RNDN);
        mpfr_init(r37363);
        mpfr_init_set_str(r37364, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r37365, "2", 10, MPFR_RNDN);
        mpfr_init(r37366);
        mpfr_init(r37367);
        mpfr_init(r37368);
        mpfr_init(r37369);
        mpfr_init(r37370);
        mpfr_init(r37371);
        mpfr_init(r37372);
        mpfr_init(r37373);
        mpfr_init(r37374);
        mpfr_init(r37375);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r37350, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r37352, mpfr_cmp(r37350, r37351) <= 0, MPFR_RNDN);
        mpfr_set_d(r37353, x, MPFR_RNDN);
        mpfr_cos(r37354, r37353, MPFR_RNDN);
        mpfr_cos(r37355, r37350, MPFR_RNDN);
        mpfr_mul(r37356, r37354, r37355, MPFR_RNDN);
        mpfr_sin(r37357, r37353, MPFR_RNDN);
        mpfr_sin(r37358, r37350, MPFR_RNDN);
        mpfr_mul(r37359, r37357, r37358, MPFR_RNDN);
        mpfr_sub(r37360, r37356, r37359, MPFR_RNDN);
        mpfr_sub(r37361, r37360, r37354, MPFR_RNDN);
        ;
        mpfr_set_si(r37363, mpfr_cmp(r37350, r37362) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r37366, r37350, r37365, MPFR_RNDN);
        mpfr_sin(r37367, r37366, MPFR_RNDN);
        mpfr_add(r37368, r37353, r37353, MPFR_RNDN);
        mpfr_add(r37369, r37350, r37368, MPFR_RNDN);
        mpfr_div(r37370, r37369, r37365, MPFR_RNDN);
        mpfr_sin(r37371, r37370, MPFR_RNDN);
        mpfr_mul(r37372, r37367, r37371, MPFR_RNDN);
        mpfr_mul(r37373, r37364, r37372, MPFR_RNDN);
        if (mpfr_get_si(r37363, MPFR_RNDN)) { mpfr_set(r37374, r37373, MPFR_RNDN); } else { mpfr_set(r37374, r37361, MPFR_RNDN); };
        if (mpfr_get_si(r37352, MPFR_RNDN)) { mpfr_set(r37375, r37361, MPFR_RNDN); } else { mpfr_set(r37375, r37374, MPFR_RNDN); };
        return mpfr_get_d(r37375, MPFR_RNDN);
}

