#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 r9221 = x;
        float r9222 = eps;
        float r9223 = r9221 + r9222;
        float r9224 = cos(r9223);
        float r9225 = cos(r9221);
        float r9226 = r9224 - r9225;
        return r9226;
}

double f_id(double x, double eps) {
        double r9227 = x;
        double r9228 = eps;
        double r9229 = r9227 + r9228;
        double r9230 = cos(r9229);
        double r9231 = cos(r9227);
        double r9232 = r9230 - r9231;
        return r9232;
}


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

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

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 r9293, r9294, r9295, r9296, r9297, r9298;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9293);
        mpfr_init(r9294);
        mpfr_init(r9295);
        mpfr_init(r9296);
        mpfr_init(r9297);
        mpfr_init(r9298);
}

double f_im(double x, double eps) {
        mpfr_set_d(r9293, x, MPFR_RNDN);
        mpfr_set_d(r9294, eps, MPFR_RNDN);
        mpfr_add(r9295, r9293, r9294, MPFR_RNDN);
        mpfr_cos(r9296, r9295, MPFR_RNDN);
        mpfr_cos(r9297, r9293, MPFR_RNDN);
        mpfr_sub(r9298, r9296, r9297, MPFR_RNDN);
        return mpfr_get_d(r9298, MPFR_RNDN);
}

static mpfr_t r9299, r9300, r9301, 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;

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

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

static mpfr_t r9329, r9330, r9331, 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;

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

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

