#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 r4874856 = x;
        float r4874857 = eps;
        float r4874858 = r4874856 + r4874857;
        float r4874859 = cos(r4874858);
        float r4874860 = cos(r4874856);
        float r4874861 = r4874859 - r4874860;
        return r4874861;
}

double f_id(double x, double eps) {
        double r4874862 = x;
        double r4874863 = eps;
        double r4874864 = r4874862 + r4874863;
        double r4874865 = cos(r4874864);
        double r4874866 = cos(r4874862);
        double r4874867 = r4874865 - r4874866;
        return r4874867;
}


double f_of(float x, float eps) {
        float r4874868 = eps;
        float r4874869 = -1.4522400974249473e-14f;
        bool r4874870 = r4874868 <= r4874869;
        float r4874871 = x;
        float r4874872 = cos(r4874871);
        float r4874873 = cos(r4874868);
        float r4874874 = r4874872 * r4874873;
        float r4874875 = sin(r4874871);
        float r4874876 = sin(r4874868);
        float r4874877 = r4874875 * r4874876;
        float r4874878 = r4874874 - r4874877;
        float r4874879 = r4874878 - r4874872;
        float r4874880 = 3.633761810222842e-07f;
        bool r4874881 = r4874868 <= r4874880;
        float r4874882 = -2.0f;
        float r4874883 = 2.0f;
        float r4874884 = r4874868 / r4874883;
        float r4874885 = sin(r4874884);
        float r4874886 = r4874882 * r4874885;
        float r4874887 = r4874871 + r4874871;
        float r4874888 = r4874868 + r4874887;
        float r4874889 = r4874888 / r4874883;
        float r4874890 = sin(r4874889);
        float r4874891 = r4874886 * r4874890;
        float r4874892 = r4874881 ? r4874891 : r4874879;
        float r4874893 = r4874870 ? r4874879 : r4874892;
        return r4874893;
}

double f_od(double x, double eps) {
        double r4874894 = eps;
        double r4874895 = -1.4522400974249473e-14;
        bool r4874896 = r4874894 <= r4874895;
        double r4874897 = x;
        double r4874898 = cos(r4874897);
        double r4874899 = cos(r4874894);
        double r4874900 = r4874898 * r4874899;
        double r4874901 = sin(r4874897);
        double r4874902 = sin(r4874894);
        double r4874903 = r4874901 * r4874902;
        double r4874904 = r4874900 - r4874903;
        double r4874905 = r4874904 - r4874898;
        double r4874906 = 3.633761810222842e-07;
        bool r4874907 = r4874894 <= r4874906;
        double r4874908 = -2.0;
        double r4874909 = 2.0;
        double r4874910 = r4874894 / r4874909;
        double r4874911 = sin(r4874910);
        double r4874912 = r4874908 * r4874911;
        double r4874913 = r4874897 + r4874897;
        double r4874914 = r4874894 + r4874913;
        double r4874915 = r4874914 / r4874909;
        double r4874916 = sin(r4874915);
        double r4874917 = r4874912 * r4874916;
        double r4874918 = r4874907 ? r4874917 : r4874905;
        double r4874919 = r4874896 ? r4874905 : r4874918;
        return r4874919;
}

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 r4874920, r4874921, r4874922, r4874923, r4874924, r4874925;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4874920);
        mpfr_init(r4874921);
        mpfr_init(r4874922);
        mpfr_init(r4874923);
        mpfr_init(r4874924);
        mpfr_init(r4874925);
}

double f_im(double x, double eps) {
        mpfr_set_d(r4874920, x, MPFR_RNDN);
        mpfr_set_d(r4874921, eps, MPFR_RNDN);
        mpfr_add(r4874922, r4874920, r4874921, MPFR_RNDN);
        mpfr_cos(r4874923, r4874922, MPFR_RNDN);
        mpfr_cos(r4874924, r4874920, MPFR_RNDN);
        mpfr_sub(r4874925, r4874923, r4874924, MPFR_RNDN);
        return mpfr_get_d(r4874925, MPFR_RNDN);
}

static mpfr_t r4874926, r4874927, r4874928, r4874929, r4874930, r4874931, r4874932, r4874933, r4874934, r4874935, r4874936, r4874937, r4874938, r4874939, r4874940, r4874941, r4874942, r4874943, r4874944, r4874945, r4874946, r4874947, r4874948, r4874949, r4874950, r4874951;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4874926);
        mpfr_init_set_str(r4874927, "-1.4522400974249473e-14", 10, MPFR_RNDN);
        mpfr_init(r4874928);
        mpfr_init(r4874929);
        mpfr_init(r4874930);
        mpfr_init(r4874931);
        mpfr_init(r4874932);
        mpfr_init(r4874933);
        mpfr_init(r4874934);
        mpfr_init(r4874935);
        mpfr_init(r4874936);
        mpfr_init(r4874937);
        mpfr_init_set_str(r4874938, "3.633761810222842e-07", 10, MPFR_RNDN);
        mpfr_init(r4874939);
        mpfr_init_set_str(r4874940, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r4874941, "2", 10, MPFR_RNDN);
        mpfr_init(r4874942);
        mpfr_init(r4874943);
        mpfr_init(r4874944);
        mpfr_init(r4874945);
        mpfr_init(r4874946);
        mpfr_init(r4874947);
        mpfr_init(r4874948);
        mpfr_init(r4874949);
        mpfr_init(r4874950);
        mpfr_init(r4874951);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r4874926, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4874928, mpfr_cmp(r4874926, r4874927) <= 0, MPFR_RNDN);
        mpfr_set_d(r4874929, x, MPFR_RNDN);
        mpfr_cos(r4874930, r4874929, MPFR_RNDN);
        mpfr_cos(r4874931, r4874926, MPFR_RNDN);
        mpfr_mul(r4874932, r4874930, r4874931, MPFR_RNDN);
        mpfr_sin(r4874933, r4874929, MPFR_RNDN);
        mpfr_sin(r4874934, r4874926, MPFR_RNDN);
        mpfr_mul(r4874935, r4874933, r4874934, MPFR_RNDN);
        mpfr_sub(r4874936, r4874932, r4874935, MPFR_RNDN);
        mpfr_sub(r4874937, r4874936, r4874930, MPFR_RNDN);
        ;
        mpfr_set_si(r4874939, mpfr_cmp(r4874926, r4874938) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r4874942, r4874926, r4874941, MPFR_RNDN);
        mpfr_sin(r4874943, r4874942, MPFR_RNDN);
        mpfr_mul(r4874944, r4874940, r4874943, MPFR_RNDN);
        mpfr_add(r4874945, r4874929, r4874929, MPFR_RNDN);
        mpfr_add(r4874946, r4874926, r4874945, MPFR_RNDN);
        mpfr_div(r4874947, r4874946, r4874941, MPFR_RNDN);
        mpfr_sin(r4874948, r4874947, MPFR_RNDN);
        mpfr_mul(r4874949, r4874944, r4874948, MPFR_RNDN);
        if (mpfr_get_si(r4874939, MPFR_RNDN)) { mpfr_set(r4874950, r4874949, MPFR_RNDN); } else { mpfr_set(r4874950, r4874937, MPFR_RNDN); };
        if (mpfr_get_si(r4874928, MPFR_RNDN)) { mpfr_set(r4874951, r4874937, MPFR_RNDN); } else { mpfr_set(r4874951, r4874950, MPFR_RNDN); };
        return mpfr_get_d(r4874951, MPFR_RNDN);
}

static mpfr_t r4874952, r4874953, r4874954, r4874955, r4874956, r4874957, r4874958, r4874959, r4874960, r4874961, r4874962, r4874963, r4874964, r4874965, r4874966, r4874967, r4874968, r4874969, r4874970, r4874971, r4874972, r4874973, r4874974, r4874975, r4874976, r4874977;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4874952);
        mpfr_init_set_str(r4874953, "-1.4522400974249473e-14", 10, MPFR_RNDN);
        mpfr_init(r4874954);
        mpfr_init(r4874955);
        mpfr_init(r4874956);
        mpfr_init(r4874957);
        mpfr_init(r4874958);
        mpfr_init(r4874959);
        mpfr_init(r4874960);
        mpfr_init(r4874961);
        mpfr_init(r4874962);
        mpfr_init(r4874963);
        mpfr_init_set_str(r4874964, "3.633761810222842e-07", 10, MPFR_RNDN);
        mpfr_init(r4874965);
        mpfr_init_set_str(r4874966, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r4874967, "2", 10, MPFR_RNDN);
        mpfr_init(r4874968);
        mpfr_init(r4874969);
        mpfr_init(r4874970);
        mpfr_init(r4874971);
        mpfr_init(r4874972);
        mpfr_init(r4874973);
        mpfr_init(r4874974);
        mpfr_init(r4874975);
        mpfr_init(r4874976);
        mpfr_init(r4874977);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r4874952, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4874954, mpfr_cmp(r4874952, r4874953) <= 0, MPFR_RNDN);
        mpfr_set_d(r4874955, x, MPFR_RNDN);
        mpfr_cos(r4874956, r4874955, MPFR_RNDN);
        mpfr_cos(r4874957, r4874952, MPFR_RNDN);
        mpfr_mul(r4874958, r4874956, r4874957, MPFR_RNDN);
        mpfr_sin(r4874959, r4874955, MPFR_RNDN);
        mpfr_sin(r4874960, r4874952, MPFR_RNDN);
        mpfr_mul(r4874961, r4874959, r4874960, MPFR_RNDN);
        mpfr_sub(r4874962, r4874958, r4874961, MPFR_RNDN);
        mpfr_sub(r4874963, r4874962, r4874956, MPFR_RNDN);
        ;
        mpfr_set_si(r4874965, mpfr_cmp(r4874952, r4874964) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r4874968, r4874952, r4874967, MPFR_RNDN);
        mpfr_sin(r4874969, r4874968, MPFR_RNDN);
        mpfr_mul(r4874970, r4874966, r4874969, MPFR_RNDN);
        mpfr_add(r4874971, r4874955, r4874955, MPFR_RNDN);
        mpfr_add(r4874972, r4874952, r4874971, MPFR_RNDN);
        mpfr_div(r4874973, r4874972, r4874967, MPFR_RNDN);
        mpfr_sin(r4874974, r4874973, MPFR_RNDN);
        mpfr_mul(r4874975, r4874970, r4874974, MPFR_RNDN);
        if (mpfr_get_si(r4874965, MPFR_RNDN)) { mpfr_set(r4874976, r4874975, MPFR_RNDN); } else { mpfr_set(r4874976, r4874963, MPFR_RNDN); };
        if (mpfr_get_si(r4874954, MPFR_RNDN)) { mpfr_set(r4874977, r4874963, MPFR_RNDN); } else { mpfr_set(r4874977, r4874976, MPFR_RNDN); };
        return mpfr_get_d(r4874977, MPFR_RNDN);
}

