#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 r11870791 = x;
        float r11870792 = eps;
        float r11870793 = r11870791 + r11870792;
        float r11870794 = cos(r11870793);
        float r11870795 = cos(r11870791);
        float r11870796 = r11870794 - r11870795;
        return r11870796;
}

double f_id(double x, double eps) {
        double r11870797 = x;
        double r11870798 = eps;
        double r11870799 = r11870797 + r11870798;
        double r11870800 = cos(r11870799);
        double r11870801 = cos(r11870797);
        double r11870802 = r11870800 - r11870801;
        return r11870802;
}


double f_of(float x, float eps) {
        float r11870803 = eps;
        float r11870804 = 2;
        float r11870805 = r11870803 / r11870804;
        float r11870806 = sin(r11870805);
        float r11870807 = x;
        float r11870808 = r11870807 + r11870807;
        float r11870809 = r11870803 + r11870808;
        float r11870810 = r11870809 / r11870804;
        float r11870811 = sin(r11870810);
        float r11870812 = r11870806 * r11870811;
        float r11870813 = -2.065093290040888e-31;
        bool r11870814 = r11870812 <= r11870813;
        float r11870815 = cos(r11870807);
        float r11870816 = cos(r11870803);
        float r11870817 = r11870815 * r11870816;
        float r11870818 = sin(r11870807);
        float r11870819 = sin(r11870803);
        float r11870820 = r11870818 * r11870819;
        float r11870821 = r11870820 + r11870815;
        float r11870822 = r11870817 - r11870821;
        float r11870823 = 1.26195908899831e-06;
        bool r11870824 = r11870812 <= r11870823;
        float r11870825 = -2;
        float r11870826 = r11870825 * r11870812;
        float r11870827 = r11870824 ? r11870826 : r11870822;
        float r11870828 = r11870814 ? r11870822 : r11870827;
        return r11870828;
}

double f_od(double x, double eps) {
        double r11870829 = eps;
        double r11870830 = 2;
        double r11870831 = r11870829 / r11870830;
        double r11870832 = sin(r11870831);
        double r11870833 = x;
        double r11870834 = r11870833 + r11870833;
        double r11870835 = r11870829 + r11870834;
        double r11870836 = r11870835 / r11870830;
        double r11870837 = sin(r11870836);
        double r11870838 = r11870832 * r11870837;
        double r11870839 = -2.065093290040888e-31;
        bool r11870840 = r11870838 <= r11870839;
        double r11870841 = cos(r11870833);
        double r11870842 = cos(r11870829);
        double r11870843 = r11870841 * r11870842;
        double r11870844 = sin(r11870833);
        double r11870845 = sin(r11870829);
        double r11870846 = r11870844 * r11870845;
        double r11870847 = r11870846 + r11870841;
        double r11870848 = r11870843 - r11870847;
        double r11870849 = 1.26195908899831e-06;
        bool r11870850 = r11870838 <= r11870849;
        double r11870851 = -2;
        double r11870852 = r11870851 * r11870838;
        double r11870853 = r11870850 ? r11870852 : r11870848;
        double r11870854 = r11870840 ? r11870848 : r11870853;
        return r11870854;
}

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 r11870855, r11870856, r11870857, r11870858, r11870859, r11870860;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r11870855);
        mpfr_init(r11870856);
        mpfr_init(r11870857);
        mpfr_init(r11870858);
        mpfr_init(r11870859);
        mpfr_init(r11870860);
}

double f_im(double x, double eps) {
        mpfr_set_d(r11870855, x, MPFR_RNDN);
        mpfr_set_d(r11870856, eps, MPFR_RNDN);
        mpfr_add(r11870857, r11870855, r11870856, MPFR_RNDN);
        mpfr_cos(r11870858, r11870857, MPFR_RNDN);
        mpfr_cos(r11870859, r11870855, MPFR_RNDN);
        mpfr_sub(r11870860, r11870858, r11870859, MPFR_RNDN);
        return mpfr_get_d(r11870860, MPFR_RNDN);
}

static mpfr_t r11870861, r11870862, r11870863, r11870864, r11870865, r11870866, r11870867, r11870868, r11870869, r11870870, r11870871, r11870872, r11870873, r11870874, r11870875, r11870876, r11870877, r11870878, r11870879, r11870880, r11870881, r11870882, r11870883, r11870884, r11870885, r11870886;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r11870861);
        mpfr_init_set_str(r11870862, "2", 10, MPFR_RNDN);
        mpfr_init(r11870863);
        mpfr_init(r11870864);
        mpfr_init(r11870865);
        mpfr_init(r11870866);
        mpfr_init(r11870867);
        mpfr_init(r11870868);
        mpfr_init(r11870869);
        mpfr_init(r11870870);
        mpfr_init_set_str(r11870871, "-2.065093290040888e-31", 10, MPFR_RNDN);
        mpfr_init(r11870872);
        mpfr_init(r11870873);
        mpfr_init(r11870874);
        mpfr_init(r11870875);
        mpfr_init(r11870876);
        mpfr_init(r11870877);
        mpfr_init(r11870878);
        mpfr_init(r11870879);
        mpfr_init(r11870880);
        mpfr_init_set_str(r11870881, "1.26195908899831e-06", 10, MPFR_RNDN);
        mpfr_init(r11870882);
        mpfr_init_set_str(r11870883, "-2", 10, MPFR_RNDN);
        mpfr_init(r11870884);
        mpfr_init(r11870885);
        mpfr_init(r11870886);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r11870861, eps, MPFR_RNDN);
        ;
        mpfr_div(r11870863, r11870861, r11870862, MPFR_RNDN);
        mpfr_sin(r11870864, r11870863, MPFR_RNDN);
        mpfr_set_d(r11870865, x, MPFR_RNDN);
        mpfr_add(r11870866, r11870865, r11870865, MPFR_RNDN);
        mpfr_add(r11870867, r11870861, r11870866, MPFR_RNDN);
        mpfr_div(r11870868, r11870867, r11870862, MPFR_RNDN);
        mpfr_sin(r11870869, r11870868, MPFR_RNDN);
        mpfr_mul(r11870870, r11870864, r11870869, MPFR_RNDN);
        ;
        mpfr_set_si(r11870872, mpfr_cmp(r11870870, r11870871) <= 0, MPFR_RNDN);
        mpfr_cos(r11870873, r11870865, MPFR_RNDN);
        mpfr_cos(r11870874, r11870861, MPFR_RNDN);
        mpfr_mul(r11870875, r11870873, r11870874, MPFR_RNDN);
        mpfr_sin(r11870876, r11870865, MPFR_RNDN);
        mpfr_sin(r11870877, r11870861, MPFR_RNDN);
        mpfr_mul(r11870878, r11870876, r11870877, MPFR_RNDN);
        mpfr_add(r11870879, r11870878, r11870873, MPFR_RNDN);
        mpfr_sub(r11870880, r11870875, r11870879, MPFR_RNDN);
        ;
        mpfr_set_si(r11870882, mpfr_cmp(r11870870, r11870881) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r11870884, r11870883, r11870870, MPFR_RNDN);
        if (mpfr_get_si(r11870882, MPFR_RNDN)) { mpfr_set(r11870885, r11870884, MPFR_RNDN); } else { mpfr_set(r11870885, r11870880, MPFR_RNDN); };
        if (mpfr_get_si(r11870872, MPFR_RNDN)) { mpfr_set(r11870886, r11870880, MPFR_RNDN); } else { mpfr_set(r11870886, r11870885, MPFR_RNDN); };
        return mpfr_get_d(r11870886, MPFR_RNDN);
}

static mpfr_t r11870887, r11870888, r11870889, r11870890, r11870891, r11870892, r11870893, r11870894, r11870895, r11870896, r11870897, r11870898, r11870899, r11870900, r11870901, r11870902, r11870903, r11870904, r11870905, r11870906, r11870907, r11870908, r11870909, r11870910, r11870911, r11870912;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r11870887);
        mpfr_init_set_str(r11870888, "2", 10, MPFR_RNDN);
        mpfr_init(r11870889);
        mpfr_init(r11870890);
        mpfr_init(r11870891);
        mpfr_init(r11870892);
        mpfr_init(r11870893);
        mpfr_init(r11870894);
        mpfr_init(r11870895);
        mpfr_init(r11870896);
        mpfr_init_set_str(r11870897, "-2.065093290040888e-31", 10, MPFR_RNDN);
        mpfr_init(r11870898);
        mpfr_init(r11870899);
        mpfr_init(r11870900);
        mpfr_init(r11870901);
        mpfr_init(r11870902);
        mpfr_init(r11870903);
        mpfr_init(r11870904);
        mpfr_init(r11870905);
        mpfr_init(r11870906);
        mpfr_init_set_str(r11870907, "1.26195908899831e-06", 10, MPFR_RNDN);
        mpfr_init(r11870908);
        mpfr_init_set_str(r11870909, "-2", 10, MPFR_RNDN);
        mpfr_init(r11870910);
        mpfr_init(r11870911);
        mpfr_init(r11870912);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r11870887, eps, MPFR_RNDN);
        ;
        mpfr_div(r11870889, r11870887, r11870888, MPFR_RNDN);
        mpfr_sin(r11870890, r11870889, MPFR_RNDN);
        mpfr_set_d(r11870891, x, MPFR_RNDN);
        mpfr_add(r11870892, r11870891, r11870891, MPFR_RNDN);
        mpfr_add(r11870893, r11870887, r11870892, MPFR_RNDN);
        mpfr_div(r11870894, r11870893, r11870888, MPFR_RNDN);
        mpfr_sin(r11870895, r11870894, MPFR_RNDN);
        mpfr_mul(r11870896, r11870890, r11870895, MPFR_RNDN);
        ;
        mpfr_set_si(r11870898, mpfr_cmp(r11870896, r11870897) <= 0, MPFR_RNDN);
        mpfr_cos(r11870899, r11870891, MPFR_RNDN);
        mpfr_cos(r11870900, r11870887, MPFR_RNDN);
        mpfr_mul(r11870901, r11870899, r11870900, MPFR_RNDN);
        mpfr_sin(r11870902, r11870891, MPFR_RNDN);
        mpfr_sin(r11870903, r11870887, MPFR_RNDN);
        mpfr_mul(r11870904, r11870902, r11870903, MPFR_RNDN);
        mpfr_add(r11870905, r11870904, r11870899, MPFR_RNDN);
        mpfr_sub(r11870906, r11870901, r11870905, MPFR_RNDN);
        ;
        mpfr_set_si(r11870908, mpfr_cmp(r11870896, r11870907) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r11870910, r11870909, r11870896, MPFR_RNDN);
        if (mpfr_get_si(r11870908, MPFR_RNDN)) { mpfr_set(r11870911, r11870910, MPFR_RNDN); } else { mpfr_set(r11870911, r11870906, MPFR_RNDN); };
        if (mpfr_get_si(r11870898, MPFR_RNDN)) { mpfr_set(r11870912, r11870906, MPFR_RNDN); } else { mpfr_set(r11870912, r11870911, MPFR_RNDN); };
        return mpfr_get_d(r11870912, MPFR_RNDN);
}

