#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 r4416108 = x;
        float r4416109 = eps;
        float r4416110 = r4416108 + r4416109;
        float r4416111 = cos(r4416110);
        float r4416112 = cos(r4416108);
        float r4416113 = r4416111 - r4416112;
        return r4416113;
}

double f_id(double x, double eps) {
        double r4416114 = x;
        double r4416115 = eps;
        double r4416116 = r4416114 + r4416115;
        double r4416117 = cos(r4416116);
        double r4416118 = cos(r4416114);
        double r4416119 = r4416117 - r4416118;
        return r4416119;
}


double f_of(float x, float eps) {
        float r4416120 = eps;
        float r4416121 = -1.0845564942913211e-10;
        bool r4416122 = r4416120 <= r4416121;
        float r4416123 = x;
        float r4416124 = cos(r4416123);
        float r4416125 = cos(r4416120);
        float r4416126 = r4416124 * r4416125;
        float r4416127 = sin(r4416123);
        float r4416128 = sin(r4416120);
        float r4416129 = r4416127 * r4416128;
        float r4416130 = r4416126 - r4416129;
        float r4416131 = r4416130 - r4416124;
        float r4416132 = 84485.71377089444;
        bool r4416133 = r4416120 <= r4416132;
        float r4416134 = -2;
        float r4416135 = 2;
        float r4416136 = r4416120 / r4416135;
        float r4416137 = sin(r4416136);
        float r4416138 = r4416123 + r4416123;
        float r4416139 = r4416120 + r4416138;
        float r4416140 = r4416139 / r4416135;
        float r4416141 = sin(r4416140);
        float r4416142 = r4416137 * r4416141;
        float r4416143 = r4416134 * r4416142;
        float r4416144 = r4416133 ? r4416143 : r4416131;
        float r4416145 = r4416122 ? r4416131 : r4416144;
        return r4416145;
}

double f_od(double x, double eps) {
        double r4416146 = eps;
        double r4416147 = -1.0845564942913211e-10;
        bool r4416148 = r4416146 <= r4416147;
        double r4416149 = x;
        double r4416150 = cos(r4416149);
        double r4416151 = cos(r4416146);
        double r4416152 = r4416150 * r4416151;
        double r4416153 = sin(r4416149);
        double r4416154 = sin(r4416146);
        double r4416155 = r4416153 * r4416154;
        double r4416156 = r4416152 - r4416155;
        double r4416157 = r4416156 - r4416150;
        double r4416158 = 84485.71377089444;
        bool r4416159 = r4416146 <= r4416158;
        double r4416160 = -2;
        double r4416161 = 2;
        double r4416162 = r4416146 / r4416161;
        double r4416163 = sin(r4416162);
        double r4416164 = r4416149 + r4416149;
        double r4416165 = r4416146 + r4416164;
        double r4416166 = r4416165 / r4416161;
        double r4416167 = sin(r4416166);
        double r4416168 = r4416163 * r4416167;
        double r4416169 = r4416160 * r4416168;
        double r4416170 = r4416159 ? r4416169 : r4416157;
        double r4416171 = r4416148 ? r4416157 : r4416170;
        return r4416171;
}

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 r4416172, r4416173, r4416174, r4416175, r4416176, r4416177;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4416172);
        mpfr_init(r4416173);
        mpfr_init(r4416174);
        mpfr_init(r4416175);
        mpfr_init(r4416176);
        mpfr_init(r4416177);
}

double f_im(double x, double eps) {
        mpfr_set_d(r4416172, x, MPFR_RNDN);
        mpfr_set_d(r4416173, eps, MPFR_RNDN);
        mpfr_add(r4416174, r4416172, r4416173, MPFR_RNDN);
        mpfr_cos(r4416175, r4416174, MPFR_RNDN);
        mpfr_cos(r4416176, r4416172, MPFR_RNDN);
        mpfr_sub(r4416177, r4416175, r4416176, MPFR_RNDN);
        return mpfr_get_d(r4416177, MPFR_RNDN);
}

static mpfr_t r4416178, r4416179, r4416180, r4416181, r4416182, r4416183, r4416184, r4416185, r4416186, r4416187, r4416188, r4416189, r4416190, r4416191, r4416192, r4416193, r4416194, r4416195, r4416196, r4416197, r4416198, r4416199, r4416200, r4416201, r4416202, r4416203;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4416178);
        mpfr_init_set_str(r4416179, "-1.0845564942913211e-10", 10, MPFR_RNDN);
        mpfr_init(r4416180);
        mpfr_init(r4416181);
        mpfr_init(r4416182);
        mpfr_init(r4416183);
        mpfr_init(r4416184);
        mpfr_init(r4416185);
        mpfr_init(r4416186);
        mpfr_init(r4416187);
        mpfr_init(r4416188);
        mpfr_init(r4416189);
        mpfr_init_set_str(r4416190, "84485.71377089444", 10, MPFR_RNDN);
        mpfr_init(r4416191);
        mpfr_init_set_str(r4416192, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r4416193, "2", 10, MPFR_RNDN);
        mpfr_init(r4416194);
        mpfr_init(r4416195);
        mpfr_init(r4416196);
        mpfr_init(r4416197);
        mpfr_init(r4416198);
        mpfr_init(r4416199);
        mpfr_init(r4416200);
        mpfr_init(r4416201);
        mpfr_init(r4416202);
        mpfr_init(r4416203);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r4416178, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4416180, mpfr_cmp(r4416178, r4416179) <= 0, MPFR_RNDN);
        mpfr_set_d(r4416181, x, MPFR_RNDN);
        mpfr_cos(r4416182, r4416181, MPFR_RNDN);
        mpfr_cos(r4416183, r4416178, MPFR_RNDN);
        mpfr_mul(r4416184, r4416182, r4416183, MPFR_RNDN);
        mpfr_sin(r4416185, r4416181, MPFR_RNDN);
        mpfr_sin(r4416186, r4416178, MPFR_RNDN);
        mpfr_mul(r4416187, r4416185, r4416186, MPFR_RNDN);
        mpfr_sub(r4416188, r4416184, r4416187, MPFR_RNDN);
        mpfr_sub(r4416189, r4416188, r4416182, MPFR_RNDN);
        ;
        mpfr_set_si(r4416191, mpfr_cmp(r4416178, r4416190) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r4416194, r4416178, r4416193, MPFR_RNDN);
        mpfr_sin(r4416195, r4416194, MPFR_RNDN);
        mpfr_add(r4416196, r4416181, r4416181, MPFR_RNDN);
        mpfr_add(r4416197, r4416178, r4416196, MPFR_RNDN);
        mpfr_div(r4416198, r4416197, r4416193, MPFR_RNDN);
        mpfr_sin(r4416199, r4416198, MPFR_RNDN);
        mpfr_mul(r4416200, r4416195, r4416199, MPFR_RNDN);
        mpfr_mul(r4416201, r4416192, r4416200, MPFR_RNDN);
        if (mpfr_get_si(r4416191, MPFR_RNDN)) { mpfr_set(r4416202, r4416201, MPFR_RNDN); } else { mpfr_set(r4416202, r4416189, MPFR_RNDN); };
        if (mpfr_get_si(r4416180, MPFR_RNDN)) { mpfr_set(r4416203, r4416189, MPFR_RNDN); } else { mpfr_set(r4416203, r4416202, MPFR_RNDN); };
        return mpfr_get_d(r4416203, MPFR_RNDN);
}

static mpfr_t r4416204, r4416205, r4416206, r4416207, r4416208, r4416209, r4416210, r4416211, r4416212, r4416213, r4416214, r4416215, r4416216, r4416217, r4416218, r4416219, r4416220, r4416221, r4416222, r4416223, r4416224, r4416225, r4416226, r4416227, r4416228, r4416229;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4416204);
        mpfr_init_set_str(r4416205, "-1.0845564942913211e-10", 10, MPFR_RNDN);
        mpfr_init(r4416206);
        mpfr_init(r4416207);
        mpfr_init(r4416208);
        mpfr_init(r4416209);
        mpfr_init(r4416210);
        mpfr_init(r4416211);
        mpfr_init(r4416212);
        mpfr_init(r4416213);
        mpfr_init(r4416214);
        mpfr_init(r4416215);
        mpfr_init_set_str(r4416216, "84485.71377089444", 10, MPFR_RNDN);
        mpfr_init(r4416217);
        mpfr_init_set_str(r4416218, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r4416219, "2", 10, MPFR_RNDN);
        mpfr_init(r4416220);
        mpfr_init(r4416221);
        mpfr_init(r4416222);
        mpfr_init(r4416223);
        mpfr_init(r4416224);
        mpfr_init(r4416225);
        mpfr_init(r4416226);
        mpfr_init(r4416227);
        mpfr_init(r4416228);
        mpfr_init(r4416229);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r4416204, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4416206, mpfr_cmp(r4416204, r4416205) <= 0, MPFR_RNDN);
        mpfr_set_d(r4416207, x, MPFR_RNDN);
        mpfr_cos(r4416208, r4416207, MPFR_RNDN);
        mpfr_cos(r4416209, r4416204, MPFR_RNDN);
        mpfr_mul(r4416210, r4416208, r4416209, MPFR_RNDN);
        mpfr_sin(r4416211, r4416207, MPFR_RNDN);
        mpfr_sin(r4416212, r4416204, MPFR_RNDN);
        mpfr_mul(r4416213, r4416211, r4416212, MPFR_RNDN);
        mpfr_sub(r4416214, r4416210, r4416213, MPFR_RNDN);
        mpfr_sub(r4416215, r4416214, r4416208, MPFR_RNDN);
        ;
        mpfr_set_si(r4416217, mpfr_cmp(r4416204, r4416216) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r4416220, r4416204, r4416219, MPFR_RNDN);
        mpfr_sin(r4416221, r4416220, MPFR_RNDN);
        mpfr_add(r4416222, r4416207, r4416207, MPFR_RNDN);
        mpfr_add(r4416223, r4416204, r4416222, MPFR_RNDN);
        mpfr_div(r4416224, r4416223, r4416219, MPFR_RNDN);
        mpfr_sin(r4416225, r4416224, MPFR_RNDN);
        mpfr_mul(r4416226, r4416221, r4416225, MPFR_RNDN);
        mpfr_mul(r4416227, r4416218, r4416226, MPFR_RNDN);
        if (mpfr_get_si(r4416217, MPFR_RNDN)) { mpfr_set(r4416228, r4416227, MPFR_RNDN); } else { mpfr_set(r4416228, r4416215, MPFR_RNDN); };
        if (mpfr_get_si(r4416206, MPFR_RNDN)) { mpfr_set(r4416229, r4416215, MPFR_RNDN); } else { mpfr_set(r4416229, r4416228, MPFR_RNDN); };
        return mpfr_get_d(r4416229, MPFR_RNDN);
}

