#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 r23017 = x;
        float r23018 = eps;
        float r23019 = r23017 + r23018;
        float r23020 = cos(r23019);
        float r23021 = cos(r23017);
        float r23022 = r23020 - r23021;
        return r23022;
}

double f_id(double x, double eps) {
        double r23023 = x;
        double r23024 = eps;
        double r23025 = r23023 + r23024;
        double r23026 = cos(r23025);
        double r23027 = cos(r23023);
        double r23028 = r23026 - r23027;
        return r23028;
}


double f_of(float x, float eps) {
        float r23029 = -2;
        float r23030 = eps;
        float r23031 = 2;
        float r23032 = r23030 / r23031;
        float r23033 = sin(r23032);
        float r23034 = cbrt(r23033);
        float r23035 = r23034 * r23034;
        float r23036 = x;
        float r23037 = r23030 + r23036;
        float r23038 = r23036 + r23037;
        float r23039 = r23038 / r23031;
        float r23040 = sin(r23039);
        float r23041 = r23034 * r23040;
        float r23042 = r23035 * r23041;
        float r23043 = r23029 * r23042;
        float r23044 = -0.0011816087204703648;
        bool r23045 = r23043 <= r23044;
        float r23046 = cos(r23036);
        float r23047 = cos(r23030);
        float r23048 = r23046 * r23047;
        float r23049 = sin(r23036);
        float r23050 = sin(r23030);
        float r23051 = r23049 * r23050;
        float r23052 = r23048 - r23051;
        float r23053 = r23052 - r23046;
        float r23054 = 0.001002838732376614;
        bool r23055 = r23043 <= r23054;
        float r23056 = r23033 * r23040;
        float r23057 = r23029 * r23056;
        float r23058 = r23051 + r23046;
        float r23059 = r23048 - r23058;
        float r23060 = r23055 ? r23057 : r23059;
        float r23061 = r23045 ? r23053 : r23060;
        return r23061;
}

double f_od(double x, double eps) {
        double r23062 = -2;
        double r23063 = eps;
        double r23064 = 2;
        double r23065 = r23063 / r23064;
        double r23066 = sin(r23065);
        double r23067 = cbrt(r23066);
        double r23068 = r23067 * r23067;
        double r23069 = x;
        double r23070 = r23063 + r23069;
        double r23071 = r23069 + r23070;
        double r23072 = r23071 / r23064;
        double r23073 = sin(r23072);
        double r23074 = r23067 * r23073;
        double r23075 = r23068 * r23074;
        double r23076 = r23062 * r23075;
        double r23077 = -0.0011816087204703648;
        bool r23078 = r23076 <= r23077;
        double r23079 = cos(r23069);
        double r23080 = cos(r23063);
        double r23081 = r23079 * r23080;
        double r23082 = sin(r23069);
        double r23083 = sin(r23063);
        double r23084 = r23082 * r23083;
        double r23085 = r23081 - r23084;
        double r23086 = r23085 - r23079;
        double r23087 = 0.001002838732376614;
        bool r23088 = r23076 <= r23087;
        double r23089 = r23066 * r23073;
        double r23090 = r23062 * r23089;
        double r23091 = r23084 + r23079;
        double r23092 = r23081 - r23091;
        double r23093 = r23088 ? r23090 : r23092;
        double r23094 = r23078 ? r23086 : r23093;
        return r23094;
}

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 r23095, r23096, r23097, r23098, r23099, r23100;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r23095);
        mpfr_init(r23096);
        mpfr_init(r23097);
        mpfr_init(r23098);
        mpfr_init(r23099);
        mpfr_init(r23100);
}

double f_im(double x, double eps) {
        mpfr_set_d(r23095, x, MPFR_RNDN);
        mpfr_set_d(r23096, eps, MPFR_RNDN);
        mpfr_add(r23097, r23095, r23096, MPFR_RNDN);
        mpfr_cos(r23098, r23097, MPFR_RNDN);
        mpfr_cos(r23099, r23095, MPFR_RNDN);
        mpfr_sub(r23100, r23098, r23099, MPFR_RNDN);
        return mpfr_get_d(r23100, MPFR_RNDN);
}

static mpfr_t r23101, r23102, r23103, r23104, r23105, r23106, r23107, r23108, r23109, r23110, r23111, r23112, r23113, r23114, r23115, r23116, r23117, r23118, r23119, r23120, r23121, r23122, r23123, r23124, r23125, r23126, r23127, r23128, r23129, r23130, r23131, r23132, r23133;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r23101, "-2", 10, MPFR_RNDN);
        mpfr_init(r23102);
        mpfr_init_set_str(r23103, "2", 10, MPFR_RNDN);
        mpfr_init(r23104);
        mpfr_init(r23105);
        mpfr_init(r23106);
        mpfr_init(r23107);
        mpfr_init(r23108);
        mpfr_init(r23109);
        mpfr_init(r23110);
        mpfr_init(r23111);
        mpfr_init(r23112);
        mpfr_init(r23113);
        mpfr_init(r23114);
        mpfr_init(r23115);
        mpfr_init_set_str(r23116, "-0.0011816087204703648", 10, MPFR_RNDN);
        mpfr_init(r23117);
        mpfr_init(r23118);
        mpfr_init(r23119);
        mpfr_init(r23120);
        mpfr_init(r23121);
        mpfr_init(r23122);
        mpfr_init(r23123);
        mpfr_init(r23124);
        mpfr_init(r23125);
        mpfr_init_set_str(r23126, "0.001002838732376614", 10, MPFR_RNDN);
        mpfr_init(r23127);
        mpfr_init(r23128);
        mpfr_init(r23129);
        mpfr_init(r23130);
        mpfr_init(r23131);
        mpfr_init(r23132);
        mpfr_init(r23133);
}

double f_fm(double x, double eps) {
        ;
        mpfr_set_d(r23102, eps, MPFR_RNDN);
        ;
        mpfr_div(r23104, r23102, r23103, MPFR_RNDN);
        mpfr_sin(r23105, r23104, MPFR_RNDN);
        mpfr_cbrt(r23106, r23105, MPFR_RNDN);
        mpfr_mul(r23107, r23106, r23106, MPFR_RNDN);
        mpfr_set_d(r23108, x, MPFR_RNDN);
        mpfr_add(r23109, r23102, r23108, MPFR_RNDN);
        mpfr_add(r23110, r23108, r23109, MPFR_RNDN);
        mpfr_div(r23111, r23110, r23103, MPFR_RNDN);
        mpfr_sin(r23112, r23111, MPFR_RNDN);
        mpfr_mul(r23113, r23106, r23112, MPFR_RNDN);
        mpfr_mul(r23114, r23107, r23113, MPFR_RNDN);
        mpfr_mul(r23115, r23101, r23114, MPFR_RNDN);
        ;
        mpfr_set_si(r23117, mpfr_cmp(r23115, r23116) <= 0, MPFR_RNDN);
        mpfr_cos(r23118, r23108, MPFR_RNDN);
        mpfr_cos(r23119, r23102, MPFR_RNDN);
        mpfr_mul(r23120, r23118, r23119, MPFR_RNDN);
        mpfr_sin(r23121, r23108, MPFR_RNDN);
        mpfr_sin(r23122, r23102, MPFR_RNDN);
        mpfr_mul(r23123, r23121, r23122, MPFR_RNDN);
        mpfr_sub(r23124, r23120, r23123, MPFR_RNDN);
        mpfr_sub(r23125, r23124, r23118, MPFR_RNDN);
        ;
        mpfr_set_si(r23127, mpfr_cmp(r23115, r23126) <= 0, MPFR_RNDN);
        mpfr_mul(r23128, r23105, r23112, MPFR_RNDN);
        mpfr_mul(r23129, r23101, r23128, MPFR_RNDN);
        mpfr_add(r23130, r23123, r23118, MPFR_RNDN);
        mpfr_sub(r23131, r23120, r23130, MPFR_RNDN);
        if (mpfr_get_si(r23127, MPFR_RNDN)) { mpfr_set(r23132, r23129, MPFR_RNDN); } else { mpfr_set(r23132, r23131, MPFR_RNDN); };
        if (mpfr_get_si(r23117, MPFR_RNDN)) { mpfr_set(r23133, r23125, MPFR_RNDN); } else { mpfr_set(r23133, r23132, MPFR_RNDN); };
        return mpfr_get_d(r23133, MPFR_RNDN);
}

static mpfr_t r23134, r23135, r23136, r23137, r23138, r23139, r23140, r23141, r23142, r23143, r23144, r23145, r23146, r23147, r23148, r23149, r23150, r23151, r23152, r23153, r23154, r23155, r23156, r23157, r23158, r23159, r23160, r23161, r23162, r23163, r23164, r23165, r23166;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r23134, "-2", 10, MPFR_RNDN);
        mpfr_init(r23135);
        mpfr_init_set_str(r23136, "2", 10, MPFR_RNDN);
        mpfr_init(r23137);
        mpfr_init(r23138);
        mpfr_init(r23139);
        mpfr_init(r23140);
        mpfr_init(r23141);
        mpfr_init(r23142);
        mpfr_init(r23143);
        mpfr_init(r23144);
        mpfr_init(r23145);
        mpfr_init(r23146);
        mpfr_init(r23147);
        mpfr_init(r23148);
        mpfr_init_set_str(r23149, "-0.0011816087204703648", 10, MPFR_RNDN);
        mpfr_init(r23150);
        mpfr_init(r23151);
        mpfr_init(r23152);
        mpfr_init(r23153);
        mpfr_init(r23154);
        mpfr_init(r23155);
        mpfr_init(r23156);
        mpfr_init(r23157);
        mpfr_init(r23158);
        mpfr_init_set_str(r23159, "0.001002838732376614", 10, MPFR_RNDN);
        mpfr_init(r23160);
        mpfr_init(r23161);
        mpfr_init(r23162);
        mpfr_init(r23163);
        mpfr_init(r23164);
        mpfr_init(r23165);
        mpfr_init(r23166);
}

double f_dm(double x, double eps) {
        ;
        mpfr_set_d(r23135, eps, MPFR_RNDN);
        ;
        mpfr_div(r23137, r23135, r23136, MPFR_RNDN);
        mpfr_sin(r23138, r23137, MPFR_RNDN);
        mpfr_cbrt(r23139, r23138, MPFR_RNDN);
        mpfr_mul(r23140, r23139, r23139, MPFR_RNDN);
        mpfr_set_d(r23141, x, MPFR_RNDN);
        mpfr_add(r23142, r23135, r23141, MPFR_RNDN);
        mpfr_add(r23143, r23141, r23142, MPFR_RNDN);
        mpfr_div(r23144, r23143, r23136, MPFR_RNDN);
        mpfr_sin(r23145, r23144, MPFR_RNDN);
        mpfr_mul(r23146, r23139, r23145, MPFR_RNDN);
        mpfr_mul(r23147, r23140, r23146, MPFR_RNDN);
        mpfr_mul(r23148, r23134, r23147, MPFR_RNDN);
        ;
        mpfr_set_si(r23150, mpfr_cmp(r23148, r23149) <= 0, MPFR_RNDN);
        mpfr_cos(r23151, r23141, MPFR_RNDN);
        mpfr_cos(r23152, r23135, MPFR_RNDN);
        mpfr_mul(r23153, r23151, r23152, MPFR_RNDN);
        mpfr_sin(r23154, r23141, MPFR_RNDN);
        mpfr_sin(r23155, r23135, MPFR_RNDN);
        mpfr_mul(r23156, r23154, r23155, MPFR_RNDN);
        mpfr_sub(r23157, r23153, r23156, MPFR_RNDN);
        mpfr_sub(r23158, r23157, r23151, MPFR_RNDN);
        ;
        mpfr_set_si(r23160, mpfr_cmp(r23148, r23159) <= 0, MPFR_RNDN);
        mpfr_mul(r23161, r23138, r23145, MPFR_RNDN);
        mpfr_mul(r23162, r23134, r23161, MPFR_RNDN);
        mpfr_add(r23163, r23156, r23151, MPFR_RNDN);
        mpfr_sub(r23164, r23153, r23163, MPFR_RNDN);
        if (mpfr_get_si(r23160, MPFR_RNDN)) { mpfr_set(r23165, r23162, MPFR_RNDN); } else { mpfr_set(r23165, r23164, MPFR_RNDN); };
        if (mpfr_get_si(r23150, MPFR_RNDN)) { mpfr_set(r23166, r23158, MPFR_RNDN); } else { mpfr_set(r23166, r23165, MPFR_RNDN); };
        return mpfr_get_d(r23166, MPFR_RNDN);
}

