#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 r9224 = x;
        float r9225 = eps;
        float r9226 = r9224 + r9225;
        float r9227 = cos(r9226);
        float r9228 = cos(r9224);
        float r9229 = r9227 - r9228;
        return r9229;
}

double f_id(double x, double eps) {
        double r9230 = x;
        double r9231 = eps;
        double r9232 = r9230 + r9231;
        double r9233 = cos(r9232);
        double r9234 = cos(r9230);
        double r9235 = r9233 - r9234;
        return r9235;
}


double f_of(float x, float eps) {
        float r9236 = eps;
        float r9237 = cos(r9236);
        float r9238 = x;
        float r9239 = cos(r9238);
        float r9240 = r9237 * r9239;
        float r9241 = sin(r9238);
        float r9242 = sin(r9236);
        float r9243 = r9241 * r9242;
        float r9244 = r9243 + r9239;
        float r9245 = r9240 - r9244;
        float r9246 = -0.01804128847162817f;
        bool r9247 = r9245 <= r9246;
        float r9248 = 0.0008125685956268052f;
        bool r9249 = r9245 <= r9248;
        float r9250 = 2.0f;
        float r9251 = r9236 / r9250;
        float r9252 = sin(r9251);
        float r9253 = r9238 + r9238;
        float r9254 = r9236 + r9253;
        float r9255 = r9254 / r9250;
        float r9256 = sin(r9255);
        float r9257 = log1p(r9256);
        float r9258 = expm1(r9257);
        float r9259 = r9252 * r9258;
        float r9260 = -2.0f;
        float r9261 = r9259 * r9260;
        float r9262 = r9240 - r9243;
        float r9263 = r9262 - r9239;
        float r9264 = r9249 ? r9261 : r9263;
        float r9265 = r9247 ? r9245 : r9264;
        return r9265;
}

double f_od(double x, double eps) {
        double r9266 = eps;
        double r9267 = cos(r9266);
        double r9268 = x;
        double r9269 = cos(r9268);
        double r9270 = r9267 * r9269;
        double r9271 = sin(r9268);
        double r9272 = sin(r9266);
        double r9273 = r9271 * r9272;
        double r9274 = r9273 + r9269;
        double r9275 = r9270 - r9274;
        double r9276 = -0.01804128847162817;
        bool r9277 = r9275 <= r9276;
        double r9278 = 0.0008125685956268052;
        bool r9279 = r9275 <= r9278;
        double r9280 = 2.0;
        double r9281 = r9266 / r9280;
        double r9282 = sin(r9281);
        double r9283 = r9268 + r9268;
        double r9284 = r9266 + r9283;
        double r9285 = r9284 / r9280;
        double r9286 = sin(r9285);
        double r9287 = log1p(r9286);
        double r9288 = expm1(r9287);
        double r9289 = r9282 * r9288;
        double r9290 = -2.0;
        double r9291 = r9289 * r9290;
        double r9292 = r9270 - r9273;
        double r9293 = r9292 - r9269;
        double r9294 = r9279 ? r9291 : r9293;
        double r9295 = r9277 ? r9275 : r9294;
        return r9295;
}

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 r9296, r9297, r9298, r9299, r9300, r9301;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9296);
        mpfr_init(r9297);
        mpfr_init(r9298);
        mpfr_init(r9299);
        mpfr_init(r9300);
        mpfr_init(r9301);
}

double f_im(double x, double eps) {
        mpfr_set_d(r9296, x, MPFR_RNDN);
        mpfr_set_d(r9297, eps, MPFR_RNDN);
        mpfr_add(r9298, r9296, r9297, MPFR_RNDN);
        mpfr_cos(r9299, r9298, MPFR_RNDN);
        mpfr_cos(r9300, r9296, MPFR_RNDN);
        mpfr_sub(r9301, r9299, r9300, MPFR_RNDN);
        return mpfr_get_d(r9301, MPFR_RNDN);
}

static mpfr_t r9302, r9303, r9304, r9305, r9306, r9307, r9308, r9309, r9310, r9311, r9312, r9313, r9314, r9315, r9316, r9317, r9318, r9319, r9320, r9321, r9322, r9323, r9324, r9325, r9326, r9327, r9328, r9329, r9330, r9331;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9302);
        mpfr_init(r9303);
        mpfr_init(r9304);
        mpfr_init(r9305);
        mpfr_init(r9306);
        mpfr_init(r9307);
        mpfr_init(r9308);
        mpfr_init(r9309);
        mpfr_init(r9310);
        mpfr_init(r9311);
        mpfr_init_set_str(r9312, "-0.01804128847162817", 10, MPFR_RNDN);
        mpfr_init(r9313);
        mpfr_init_set_str(r9314, "0.0008125685956268052", 10, MPFR_RNDN);
        mpfr_init(r9315);
        mpfr_init_set_str(r9316, "2", 10, MPFR_RNDN);
        mpfr_init(r9317);
        mpfr_init(r9318);
        mpfr_init(r9319);
        mpfr_init(r9320);
        mpfr_init(r9321);
        mpfr_init(r9322);
        mpfr_init(r9323);
        mpfr_init(r9324);
        mpfr_init(r9325);
        mpfr_init_set_str(r9326, "-2", 10, MPFR_RNDN);
        mpfr_init(r9327);
        mpfr_init(r9328);
        mpfr_init(r9329);
        mpfr_init(r9330);
        mpfr_init(r9331);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r9302, eps, MPFR_RNDN);
        mpfr_cos(r9303, r9302, MPFR_RNDN);
        mpfr_set_d(r9304, x, MPFR_RNDN);
        mpfr_cos(r9305, r9304, MPFR_RNDN);
        mpfr_mul(r9306, r9303, r9305, MPFR_RNDN);
        mpfr_sin(r9307, r9304, MPFR_RNDN);
        mpfr_sin(r9308, r9302, MPFR_RNDN);
        mpfr_mul(r9309, r9307, r9308, MPFR_RNDN);
        mpfr_add(r9310, r9309, r9305, MPFR_RNDN);
        mpfr_sub(r9311, r9306, r9310, MPFR_RNDN);
        ;
        mpfr_set_si(r9313, mpfr_cmp(r9311, r9312) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r9315, mpfr_cmp(r9311, r9314) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r9317, r9302, r9316, MPFR_RNDN);
        mpfr_sin(r9318, r9317, MPFR_RNDN);
        mpfr_add(r9319, r9304, r9304, MPFR_RNDN);
        mpfr_add(r9320, r9302, r9319, MPFR_RNDN);
        mpfr_div(r9321, r9320, r9316, MPFR_RNDN);
        mpfr_sin(r9322, r9321, MPFR_RNDN);
        mpfr_log1p(r9323, r9322, MPFR_RNDN);
        mpfr_expm1(r9324, r9323, MPFR_RNDN);
        mpfr_mul(r9325, r9318, r9324, MPFR_RNDN);
        ;
        mpfr_mul(r9327, r9325, r9326, MPFR_RNDN);
        mpfr_sub(r9328, r9306, r9309, MPFR_RNDN);
        mpfr_sub(r9329, r9328, r9305, MPFR_RNDN);
        if (mpfr_get_si(r9315, MPFR_RNDN)) { mpfr_set(r9330, r9327, MPFR_RNDN); } else { mpfr_set(r9330, r9329, MPFR_RNDN); };
        if (mpfr_get_si(r9313, MPFR_RNDN)) { mpfr_set(r9331, r9311, MPFR_RNDN); } else { mpfr_set(r9331, r9330, MPFR_RNDN); };
        return mpfr_get_d(r9331, MPFR_RNDN);
}

static mpfr_t r9332, r9333, r9334, r9335, r9336, r9337, r9338, r9339, r9340, r9341, r9342, r9343, r9344, r9345, r9346, r9347, r9348, r9349, r9350, r9351, r9352, r9353, r9354, r9355, r9356, r9357, r9358, r9359, r9360, r9361;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9332);
        mpfr_init(r9333);
        mpfr_init(r9334);
        mpfr_init(r9335);
        mpfr_init(r9336);
        mpfr_init(r9337);
        mpfr_init(r9338);
        mpfr_init(r9339);
        mpfr_init(r9340);
        mpfr_init(r9341);
        mpfr_init_set_str(r9342, "-0.01804128847162817", 10, MPFR_RNDN);
        mpfr_init(r9343);
        mpfr_init_set_str(r9344, "0.0008125685956268052", 10, MPFR_RNDN);
        mpfr_init(r9345);
        mpfr_init_set_str(r9346, "2", 10, MPFR_RNDN);
        mpfr_init(r9347);
        mpfr_init(r9348);
        mpfr_init(r9349);
        mpfr_init(r9350);
        mpfr_init(r9351);
        mpfr_init(r9352);
        mpfr_init(r9353);
        mpfr_init(r9354);
        mpfr_init(r9355);
        mpfr_init_set_str(r9356, "-2", 10, MPFR_RNDN);
        mpfr_init(r9357);
        mpfr_init(r9358);
        mpfr_init(r9359);
        mpfr_init(r9360);
        mpfr_init(r9361);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r9332, eps, MPFR_RNDN);
        mpfr_cos(r9333, r9332, MPFR_RNDN);
        mpfr_set_d(r9334, x, MPFR_RNDN);
        mpfr_cos(r9335, r9334, MPFR_RNDN);
        mpfr_mul(r9336, r9333, r9335, MPFR_RNDN);
        mpfr_sin(r9337, r9334, MPFR_RNDN);
        mpfr_sin(r9338, r9332, MPFR_RNDN);
        mpfr_mul(r9339, r9337, r9338, MPFR_RNDN);
        mpfr_add(r9340, r9339, r9335, MPFR_RNDN);
        mpfr_sub(r9341, r9336, r9340, MPFR_RNDN);
        ;
        mpfr_set_si(r9343, mpfr_cmp(r9341, r9342) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r9345, mpfr_cmp(r9341, r9344) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r9347, r9332, r9346, MPFR_RNDN);
        mpfr_sin(r9348, r9347, MPFR_RNDN);
        mpfr_add(r9349, r9334, r9334, MPFR_RNDN);
        mpfr_add(r9350, r9332, r9349, MPFR_RNDN);
        mpfr_div(r9351, r9350, r9346, MPFR_RNDN);
        mpfr_sin(r9352, r9351, MPFR_RNDN);
        mpfr_log1p(r9353, r9352, MPFR_RNDN);
        mpfr_expm1(r9354, r9353, MPFR_RNDN);
        mpfr_mul(r9355, r9348, r9354, MPFR_RNDN);
        ;
        mpfr_mul(r9357, r9355, r9356, MPFR_RNDN);
        mpfr_sub(r9358, r9336, r9339, MPFR_RNDN);
        mpfr_sub(r9359, r9358, r9335, MPFR_RNDN);
        if (mpfr_get_si(r9345, MPFR_RNDN)) { mpfr_set(r9360, r9357, MPFR_RNDN); } else { mpfr_set(r9360, r9359, MPFR_RNDN); };
        if (mpfr_get_si(r9343, MPFR_RNDN)) { mpfr_set(r9361, r9341, MPFR_RNDN); } else { mpfr_set(r9361, r9360, MPFR_RNDN); };
        return mpfr_get_d(r9361, MPFR_RNDN);
}

