#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 r9249 = x;
        float r9250 = eps;
        float r9251 = r9249 + r9250;
        float r9252 = cos(r9251);
        float r9253 = cos(r9249);
        float r9254 = r9252 - r9253;
        return r9254;
}

double f_id(double x, double eps) {
        double r9255 = x;
        double r9256 = eps;
        double r9257 = r9255 + r9256;
        double r9258 = cos(r9257);
        double r9259 = cos(r9255);
        double r9260 = r9258 - r9259;
        return r9260;
}


double f_of(float x, float eps) {
        float r9261 = eps;
        float r9262 = cos(r9261);
        float r9263 = x;
        float r9264 = cos(r9263);
        float r9265 = r9262 * r9264;
        float r9266 = sin(r9263);
        float r9267 = sin(r9261);
        float r9268 = r9266 * r9267;
        float r9269 = r9265 - r9268;
        float r9270 = r9269 - r9264;
        float r9271 = -0.01804128847162817f;
        bool r9272 = r9270 <= r9271;
        float r9273 = r9268 + r9264;
        float r9274 = r9265 - r9273;
        float r9275 = 0.11332772777245766f;
        bool r9276 = r9270 <= r9275;
        float r9277 = 2.0f;
        float r9278 = r9261 / r9277;
        float r9279 = sin(r9278);
        float r9280 = r9263 + r9263;
        float r9281 = r9261 + r9280;
        float r9282 = r9281 / r9277;
        float r9283 = sin(r9282);
        float r9284 = r9279 * r9283;
        float r9285 = -2.0f;
        float r9286 = r9284 * r9285;
        float r9287 = r9276 ? r9286 : r9270;
        float r9288 = r9272 ? r9274 : r9287;
        return r9288;
}

double f_od(double x, double eps) {
        double r9289 = eps;
        double r9290 = cos(r9289);
        double r9291 = x;
        double r9292 = cos(r9291);
        double r9293 = r9290 * r9292;
        double r9294 = sin(r9291);
        double r9295 = sin(r9289);
        double r9296 = r9294 * r9295;
        double r9297 = r9293 - r9296;
        double r9298 = r9297 - r9292;
        double r9299 = -0.01804128847162817;
        bool r9300 = r9298 <= r9299;
        double r9301 = r9296 + r9292;
        double r9302 = r9293 - r9301;
        double r9303 = 0.11332772777245766;
        bool r9304 = r9298 <= r9303;
        double r9305 = 2.0;
        double r9306 = r9289 / r9305;
        double r9307 = sin(r9306);
        double r9308 = r9291 + r9291;
        double r9309 = r9289 + r9308;
        double r9310 = r9309 / r9305;
        double r9311 = sin(r9310);
        double r9312 = r9307 * r9311;
        double r9313 = -2.0;
        double r9314 = r9312 * r9313;
        double r9315 = r9304 ? r9314 : r9298;
        double r9316 = r9300 ? r9302 : r9315;
        return r9316;
}

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 r9317, r9318, r9319, r9320, r9321, r9322;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9317);
        mpfr_init(r9318);
        mpfr_init(r9319);
        mpfr_init(r9320);
        mpfr_init(r9321);
        mpfr_init(r9322);
}

double f_im(double x, double eps) {
        mpfr_set_d(r9317, x, MPFR_RNDN);
        mpfr_set_d(r9318, eps, MPFR_RNDN);
        mpfr_add(r9319, r9317, r9318, MPFR_RNDN);
        mpfr_cos(r9320, r9319, MPFR_RNDN);
        mpfr_cos(r9321, r9317, MPFR_RNDN);
        mpfr_sub(r9322, r9320, r9321, MPFR_RNDN);
        return mpfr_get_d(r9322, MPFR_RNDN);
}

static mpfr_t r9323, r9324, r9325, r9326, r9327, r9328, r9329, r9330, r9331, r9332, r9333, r9334, r9335, r9336, r9337, r9338, r9339, r9340, r9341, r9342, r9343, r9344, r9345, r9346, r9347, r9348, r9349, r9350;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9323);
        mpfr_init(r9324);
        mpfr_init(r9325);
        mpfr_init(r9326);
        mpfr_init(r9327);
        mpfr_init(r9328);
        mpfr_init(r9329);
        mpfr_init(r9330);
        mpfr_init(r9331);
        mpfr_init(r9332);
        mpfr_init_set_str(r9333, "-0.01804128847162817", 10, MPFR_RNDN);
        mpfr_init(r9334);
        mpfr_init(r9335);
        mpfr_init(r9336);
        mpfr_init_set_str(r9337, "0.11332772777245766", 10, MPFR_RNDN);
        mpfr_init(r9338);
        mpfr_init_set_str(r9339, "2", 10, MPFR_RNDN);
        mpfr_init(r9340);
        mpfr_init(r9341);
        mpfr_init(r9342);
        mpfr_init(r9343);
        mpfr_init(r9344);
        mpfr_init(r9345);
        mpfr_init(r9346);
        mpfr_init_set_str(r9347, "-2", 10, MPFR_RNDN);
        mpfr_init(r9348);
        mpfr_init(r9349);
        mpfr_init(r9350);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r9323, eps, MPFR_RNDN);
        mpfr_cos(r9324, r9323, MPFR_RNDN);
        mpfr_set_d(r9325, x, MPFR_RNDN);
        mpfr_cos(r9326, r9325, MPFR_RNDN);
        mpfr_mul(r9327, r9324, r9326, MPFR_RNDN);
        mpfr_sin(r9328, r9325, MPFR_RNDN);
        mpfr_sin(r9329, r9323, MPFR_RNDN);
        mpfr_mul(r9330, r9328, r9329, MPFR_RNDN);
        mpfr_sub(r9331, r9327, r9330, MPFR_RNDN);
        mpfr_sub(r9332, r9331, r9326, MPFR_RNDN);
        ;
        mpfr_set_si(r9334, mpfr_cmp(r9332, r9333) <= 0, MPFR_RNDN);
        mpfr_add(r9335, r9330, r9326, MPFR_RNDN);
        mpfr_sub(r9336, r9327, r9335, MPFR_RNDN);
        ;
        mpfr_set_si(r9338, mpfr_cmp(r9332, r9337) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r9340, r9323, r9339, MPFR_RNDN);
        mpfr_sin(r9341, r9340, MPFR_RNDN);
        mpfr_add(r9342, r9325, r9325, MPFR_RNDN);
        mpfr_add(r9343, r9323, r9342, MPFR_RNDN);
        mpfr_div(r9344, r9343, r9339, MPFR_RNDN);
        mpfr_sin(r9345, r9344, MPFR_RNDN);
        mpfr_mul(r9346, r9341, r9345, MPFR_RNDN);
        ;
        mpfr_mul(r9348, r9346, r9347, MPFR_RNDN);
        if (mpfr_get_si(r9338, MPFR_RNDN)) { mpfr_set(r9349, r9348, MPFR_RNDN); } else { mpfr_set(r9349, r9332, MPFR_RNDN); };
        if (mpfr_get_si(r9334, MPFR_RNDN)) { mpfr_set(r9350, r9336, MPFR_RNDN); } else { mpfr_set(r9350, r9349, MPFR_RNDN); };
        return mpfr_get_d(r9350, MPFR_RNDN);
}

static mpfr_t r9351, r9352, r9353, r9354, r9355, r9356, r9357, r9358, r9359, r9360, r9361, r9362, r9363, r9364, r9365, r9366, r9367, r9368, r9369, r9370, r9371, r9372, r9373, r9374, r9375, r9376, r9377, r9378;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9351);
        mpfr_init(r9352);
        mpfr_init(r9353);
        mpfr_init(r9354);
        mpfr_init(r9355);
        mpfr_init(r9356);
        mpfr_init(r9357);
        mpfr_init(r9358);
        mpfr_init(r9359);
        mpfr_init(r9360);
        mpfr_init_set_str(r9361, "-0.01804128847162817", 10, MPFR_RNDN);
        mpfr_init(r9362);
        mpfr_init(r9363);
        mpfr_init(r9364);
        mpfr_init_set_str(r9365, "0.11332772777245766", 10, MPFR_RNDN);
        mpfr_init(r9366);
        mpfr_init_set_str(r9367, "2", 10, MPFR_RNDN);
        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, "-2", 10, MPFR_RNDN);
        mpfr_init(r9376);
        mpfr_init(r9377);
        mpfr_init(r9378);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r9351, eps, MPFR_RNDN);
        mpfr_cos(r9352, r9351, MPFR_RNDN);
        mpfr_set_d(r9353, x, MPFR_RNDN);
        mpfr_cos(r9354, r9353, MPFR_RNDN);
        mpfr_mul(r9355, r9352, r9354, MPFR_RNDN);
        mpfr_sin(r9356, r9353, MPFR_RNDN);
        mpfr_sin(r9357, r9351, MPFR_RNDN);
        mpfr_mul(r9358, r9356, r9357, MPFR_RNDN);
        mpfr_sub(r9359, r9355, r9358, MPFR_RNDN);
        mpfr_sub(r9360, r9359, r9354, MPFR_RNDN);
        ;
        mpfr_set_si(r9362, mpfr_cmp(r9360, r9361) <= 0, MPFR_RNDN);
        mpfr_add(r9363, r9358, r9354, MPFR_RNDN);
        mpfr_sub(r9364, r9355, r9363, MPFR_RNDN);
        ;
        mpfr_set_si(r9366, mpfr_cmp(r9360, r9365) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r9368, r9351, r9367, MPFR_RNDN);
        mpfr_sin(r9369, r9368, MPFR_RNDN);
        mpfr_add(r9370, r9353, r9353, MPFR_RNDN);
        mpfr_add(r9371, r9351, r9370, MPFR_RNDN);
        mpfr_div(r9372, r9371, r9367, MPFR_RNDN);
        mpfr_sin(r9373, r9372, MPFR_RNDN);
        mpfr_mul(r9374, r9369, r9373, MPFR_RNDN);
        ;
        mpfr_mul(r9376, r9374, r9375, MPFR_RNDN);
        if (mpfr_get_si(r9366, MPFR_RNDN)) { mpfr_set(r9377, r9376, MPFR_RNDN); } else { mpfr_set(r9377, r9360, MPFR_RNDN); };
        if (mpfr_get_si(r9362, MPFR_RNDN)) { mpfr_set(r9378, r9364, MPFR_RNDN); } else { mpfr_set(r9378, r9377, MPFR_RNDN); };
        return mpfr_get_d(r9378, MPFR_RNDN);
}

