#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 r9291 = x;
        float r9292 = eps;
        float r9293 = r9291 + r9292;
        float r9294 = cos(r9293);
        float r9295 = cos(r9291);
        float r9296 = r9294 - r9295;
        return r9296;
}

double f_id(double x, double eps) {
        double r9297 = x;
        double r9298 = eps;
        double r9299 = r9297 + r9298;
        double r9300 = cos(r9299);
        double r9301 = cos(r9297);
        double r9302 = r9300 - r9301;
        return r9302;
}


double f_of(float x, float eps) {
        float r9303 = x;
        float r9304 = cos(r9303);
        float r9305 = eps;
        float r9306 = cos(r9305);
        float r9307 = r9304 * r9306;
        float r9308 = sin(r9305);
        float r9309 = sin(r9303);
        float r9310 = r9308 * r9309;
        float r9311 = r9307 - r9310;
        float r9312 = r9311 - r9304;
        float r9313 = -0.06772419700563675f;
        bool r9314 = r9312 <= r9313;
        float r9315 = 1.3011456344553308e-05f;
        bool r9316 = r9312 <= r9315;
        float r9317 = 0.5f;
        float r9318 = r9305 * r9317;
        float r9319 = sin(r9318);
        float r9320 = -2.0f;
        float r9321 = r9319 * r9320;
        float r9322 = 2.0f;
        float r9323 = fma(r9303, r9322, r9305);
        float r9324 = r9323 * r9317;
        float r9325 = sin(r9324);
        float r9326 = r9321 * r9325;
        float r9327 = r9304 + r9310;
        float r9328 = r9307 - r9327;
        float r9329 = r9316 ? r9326 : r9328;
        float r9330 = r9314 ? r9312 : r9329;
        return r9330;
}

double f_od(double x, double eps) {
        double r9331 = x;
        double r9332 = cos(r9331);
        double r9333 = eps;
        double r9334 = cos(r9333);
        double r9335 = r9332 * r9334;
        double r9336 = sin(r9333);
        double r9337 = sin(r9331);
        double r9338 = r9336 * r9337;
        double r9339 = r9335 - r9338;
        double r9340 = r9339 - r9332;
        double r9341 = -0.06772419700563675;
        bool r9342 = r9340 <= r9341;
        double r9343 = 1.3011456344553308e-05;
        bool r9344 = r9340 <= r9343;
        double r9345 = 0.5;
        double r9346 = r9333 * r9345;
        double r9347 = sin(r9346);
        double r9348 = -2.0;
        double r9349 = r9347 * r9348;
        double r9350 = 2.0;
        double r9351 = fma(r9331, r9350, r9333);
        double r9352 = r9351 * r9345;
        double r9353 = sin(r9352);
        double r9354 = r9349 * r9353;
        double r9355 = r9332 + r9338;
        double r9356 = r9335 - r9355;
        double r9357 = r9344 ? r9354 : r9356;
        double r9358 = r9342 ? r9340 : r9357;
        return r9358;
}

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 r9359, r9360, r9361, r9362, r9363, r9364;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9359);
        mpfr_init(r9360);
        mpfr_init(r9361);
        mpfr_init(r9362);
        mpfr_init(r9363);
        mpfr_init(r9364);
}

double f_im(double x, double eps) {
        mpfr_set_d(r9359, x, MPFR_RNDN);
        mpfr_set_d(r9360, eps, MPFR_RNDN);
        mpfr_add(r9361, r9359, r9360, MPFR_RNDN);
        mpfr_cos(r9362, r9361, MPFR_RNDN);
        mpfr_cos(r9363, r9359, MPFR_RNDN);
        mpfr_sub(r9364, r9362, r9363, MPFR_RNDN);
        return mpfr_get_d(r9364, MPFR_RNDN);
}

static mpfr_t r9365, r9366, r9367, r9368, r9369, r9370, r9371, r9372, r9373, r9374, r9375, r9376, r9377, r9378, r9379, r9380, r9381, r9382, r9383, r9384, r9385, r9386, r9387, r9388, r9389, r9390, r9391, r9392;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9365);
        mpfr_init(r9366);
        mpfr_init(r9367);
        mpfr_init(r9368);
        mpfr_init(r9369);
        mpfr_init(r9370);
        mpfr_init(r9371);
        mpfr_init(r9372);
        mpfr_init(r9373);
        mpfr_init(r9374);
        mpfr_init_set_str(r9375, "-0.06772419700563675", 10, MPFR_RNDN);
        mpfr_init(r9376);
        mpfr_init_set_str(r9377, "1.3011456344553308e-05", 10, MPFR_RNDN);
        mpfr_init(r9378);
        mpfr_init_set_str(r9379, "1/2", 10, MPFR_RNDN);
        mpfr_init(r9380);
        mpfr_init(r9381);
        mpfr_init_set_str(r9382, "-2", 10, MPFR_RNDN);
        mpfr_init(r9383);
        mpfr_init_set_str(r9384, "2", 10, MPFR_RNDN);
        mpfr_init(r9385);
        mpfr_init(r9386);
        mpfr_init(r9387);
        mpfr_init(r9388);
        mpfr_init(r9389);
        mpfr_init(r9390);
        mpfr_init(r9391);
        mpfr_init(r9392);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r9365, x, MPFR_RNDN);
        mpfr_cos(r9366, r9365, MPFR_RNDN);
        mpfr_set_d(r9367, eps, MPFR_RNDN);
        mpfr_cos(r9368, r9367, MPFR_RNDN);
        mpfr_mul(r9369, r9366, r9368, MPFR_RNDN);
        mpfr_sin(r9370, r9367, MPFR_RNDN);
        mpfr_sin(r9371, r9365, MPFR_RNDN);
        mpfr_mul(r9372, r9370, r9371, MPFR_RNDN);
        mpfr_sub(r9373, r9369, r9372, MPFR_RNDN);
        mpfr_sub(r9374, r9373, r9366, MPFR_RNDN);
        ;
        mpfr_set_si(r9376, mpfr_cmp(r9374, r9375) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r9378, mpfr_cmp(r9374, r9377) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r9380, r9367, r9379, MPFR_RNDN);
        mpfr_sin(r9381, r9380, MPFR_RNDN);
        ;
        mpfr_mul(r9383, r9381, r9382, MPFR_RNDN);
        ;
        mpfr_fma(r9385, r9365, r9384, r9367, MPFR_RNDN);
        mpfr_mul(r9386, r9385, r9379, MPFR_RNDN);
        mpfr_sin(r9387, r9386, MPFR_RNDN);
        mpfr_mul(r9388, r9383, r9387, MPFR_RNDN);
        mpfr_add(r9389, r9366, r9372, MPFR_RNDN);
        mpfr_sub(r9390, r9369, r9389, MPFR_RNDN);
        if (mpfr_get_si(r9378, MPFR_RNDN)) { mpfr_set(r9391, r9388, MPFR_RNDN); } else { mpfr_set(r9391, r9390, MPFR_RNDN); };
        if (mpfr_get_si(r9376, MPFR_RNDN)) { mpfr_set(r9392, r9374, MPFR_RNDN); } else { mpfr_set(r9392, r9391, MPFR_RNDN); };
        return mpfr_get_d(r9392, MPFR_RNDN);
}

static mpfr_t r9393, r9394, r9395, r9396, r9397, r9398, r9399, r9400, r9401, r9402, r9403, r9404, r9405, r9406, r9407, r9408, r9409, r9410, r9411, r9412, r9413, r9414, r9415, r9416, r9417, r9418, r9419, r9420;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9393);
        mpfr_init(r9394);
        mpfr_init(r9395);
        mpfr_init(r9396);
        mpfr_init(r9397);
        mpfr_init(r9398);
        mpfr_init(r9399);
        mpfr_init(r9400);
        mpfr_init(r9401);
        mpfr_init(r9402);
        mpfr_init_set_str(r9403, "-0.06772419700563675", 10, MPFR_RNDN);
        mpfr_init(r9404);
        mpfr_init_set_str(r9405, "1.3011456344553308e-05", 10, MPFR_RNDN);
        mpfr_init(r9406);
        mpfr_init_set_str(r9407, "1/2", 10, MPFR_RNDN);
        mpfr_init(r9408);
        mpfr_init(r9409);
        mpfr_init_set_str(r9410, "-2", 10, MPFR_RNDN);
        mpfr_init(r9411);
        mpfr_init_set_str(r9412, "2", 10, MPFR_RNDN);
        mpfr_init(r9413);
        mpfr_init(r9414);
        mpfr_init(r9415);
        mpfr_init(r9416);
        mpfr_init(r9417);
        mpfr_init(r9418);
        mpfr_init(r9419);
        mpfr_init(r9420);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r9393, x, MPFR_RNDN);
        mpfr_cos(r9394, r9393, MPFR_RNDN);
        mpfr_set_d(r9395, eps, MPFR_RNDN);
        mpfr_cos(r9396, r9395, MPFR_RNDN);
        mpfr_mul(r9397, r9394, r9396, MPFR_RNDN);
        mpfr_sin(r9398, r9395, MPFR_RNDN);
        mpfr_sin(r9399, r9393, MPFR_RNDN);
        mpfr_mul(r9400, r9398, r9399, MPFR_RNDN);
        mpfr_sub(r9401, r9397, r9400, MPFR_RNDN);
        mpfr_sub(r9402, r9401, r9394, MPFR_RNDN);
        ;
        mpfr_set_si(r9404, mpfr_cmp(r9402, r9403) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r9406, mpfr_cmp(r9402, r9405) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r9408, r9395, r9407, MPFR_RNDN);
        mpfr_sin(r9409, r9408, MPFR_RNDN);
        ;
        mpfr_mul(r9411, r9409, r9410, MPFR_RNDN);
        ;
        mpfr_fma(r9413, r9393, r9412, r9395, MPFR_RNDN);
        mpfr_mul(r9414, r9413, r9407, MPFR_RNDN);
        mpfr_sin(r9415, r9414, MPFR_RNDN);
        mpfr_mul(r9416, r9411, r9415, MPFR_RNDN);
        mpfr_add(r9417, r9394, r9400, MPFR_RNDN);
        mpfr_sub(r9418, r9397, r9417, MPFR_RNDN);
        if (mpfr_get_si(r9406, MPFR_RNDN)) { mpfr_set(r9419, r9416, MPFR_RNDN); } else { mpfr_set(r9419, r9418, MPFR_RNDN); };
        if (mpfr_get_si(r9404, MPFR_RNDN)) { mpfr_set(r9420, r9402, MPFR_RNDN); } else { mpfr_set(r9420, r9419, MPFR_RNDN); };
        return mpfr_get_d(r9420, MPFR_RNDN);
}

