#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 r36784 = x;
        float r36785 = eps;
        float r36786 = r36784 + r36785;
        float r36787 = cos(r36786);
        float r36788 = cos(r36784);
        float r36789 = r36787 - r36788;
        return r36789;
}

double f_id(double x, double eps) {
        double r36790 = x;
        double r36791 = eps;
        double r36792 = r36790 + r36791;
        double r36793 = cos(r36792);
        double r36794 = cos(r36790);
        double r36795 = r36793 - r36794;
        return r36795;
}


double f_of(float x, float eps) {
        float r36796 = eps;
        float r36797 = -0.00013580674868090203;
        bool r36798 = r36796 <= r36797;
        float r36799 = x;
        float r36800 = cos(r36799);
        float r36801 = cos(r36796);
        float r36802 = r36800 * r36801;
        float r36803 = sin(r36799);
        float r36804 = sin(r36796);
        float r36805 = r36803 * r36804;
        float r36806 = r36802 - r36805;
        float r36807 = r36806 - r36800;
        float r36808 = 0.00039206272042066707;
        bool r36809 = r36796 <= r36808;
        float r36810 = -2;
        float r36811 = 2;
        float r36812 = r36796 / r36811;
        float r36813 = sin(r36812);
        float r36814 = r36799 + r36799;
        float r36815 = r36796 + r36814;
        float r36816 = r36815 / r36811;
        float r36817 = sin(r36816);
        float r36818 = r36813 * r36817;
        float r36819 = r36810 * r36818;
        float r36820 = r36809 ? r36819 : r36807;
        float r36821 = r36798 ? r36807 : r36820;
        return r36821;
}

double f_od(double x, double eps) {
        double r36822 = eps;
        double r36823 = -0.00013580674868090203;
        bool r36824 = r36822 <= r36823;
        double r36825 = x;
        double r36826 = cos(r36825);
        double r36827 = cos(r36822);
        double r36828 = r36826 * r36827;
        double r36829 = sin(r36825);
        double r36830 = sin(r36822);
        double r36831 = r36829 * r36830;
        double r36832 = r36828 - r36831;
        double r36833 = r36832 - r36826;
        double r36834 = 0.00039206272042066707;
        bool r36835 = r36822 <= r36834;
        double r36836 = -2;
        double r36837 = 2;
        double r36838 = r36822 / r36837;
        double r36839 = sin(r36838);
        double r36840 = r36825 + r36825;
        double r36841 = r36822 + r36840;
        double r36842 = r36841 / r36837;
        double r36843 = sin(r36842);
        double r36844 = r36839 * r36843;
        double r36845 = r36836 * r36844;
        double r36846 = r36835 ? r36845 : r36833;
        double r36847 = r36824 ? r36833 : r36846;
        return r36847;
}

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 r36848, r36849, r36850, r36851, r36852, r36853;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r36848);
        mpfr_init(r36849);
        mpfr_init(r36850);
        mpfr_init(r36851);
        mpfr_init(r36852);
        mpfr_init(r36853);
}

double f_im(double x, double eps) {
        mpfr_set_d(r36848, x, MPFR_RNDN);
        mpfr_set_d(r36849, eps, MPFR_RNDN);
        mpfr_add(r36850, r36848, r36849, MPFR_RNDN);
        mpfr_cos(r36851, r36850, MPFR_RNDN);
        mpfr_cos(r36852, r36848, MPFR_RNDN);
        mpfr_sub(r36853, r36851, r36852, MPFR_RNDN);
        return mpfr_get_d(r36853, MPFR_RNDN);
}

static mpfr_t r36854, r36855, r36856, r36857, r36858, r36859, r36860, r36861, r36862, r36863, r36864, r36865, r36866, r36867, r36868, r36869, r36870, r36871, r36872, r36873, r36874, r36875, r36876, r36877, r36878, r36879;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r36854);
        mpfr_init_set_str(r36855, "-0.00013580674868090203", 10, MPFR_RNDN);
        mpfr_init(r36856);
        mpfr_init(r36857);
        mpfr_init(r36858);
        mpfr_init(r36859);
        mpfr_init(r36860);
        mpfr_init(r36861);
        mpfr_init(r36862);
        mpfr_init(r36863);
        mpfr_init(r36864);
        mpfr_init(r36865);
        mpfr_init_set_str(r36866, "0.00039206272042066707", 10, MPFR_RNDN);
        mpfr_init(r36867);
        mpfr_init_set_str(r36868, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r36869, "2", 10, MPFR_RNDN);
        mpfr_init(r36870);
        mpfr_init(r36871);
        mpfr_init(r36872);
        mpfr_init(r36873);
        mpfr_init(r36874);
        mpfr_init(r36875);
        mpfr_init(r36876);
        mpfr_init(r36877);
        mpfr_init(r36878);
        mpfr_init(r36879);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r36854, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r36856, mpfr_cmp(r36854, r36855) <= 0, MPFR_RNDN);
        mpfr_set_d(r36857, x, MPFR_RNDN);
        mpfr_cos(r36858, r36857, MPFR_RNDN);
        mpfr_cos(r36859, r36854, MPFR_RNDN);
        mpfr_mul(r36860, r36858, r36859, MPFR_RNDN);
        mpfr_sin(r36861, r36857, MPFR_RNDN);
        mpfr_sin(r36862, r36854, MPFR_RNDN);
        mpfr_mul(r36863, r36861, r36862, MPFR_RNDN);
        mpfr_sub(r36864, r36860, r36863, MPFR_RNDN);
        mpfr_sub(r36865, r36864, r36858, MPFR_RNDN);
        ;
        mpfr_set_si(r36867, mpfr_cmp(r36854, r36866) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r36870, r36854, r36869, MPFR_RNDN);
        mpfr_sin(r36871, r36870, MPFR_RNDN);
        mpfr_add(r36872, r36857, r36857, MPFR_RNDN);
        mpfr_add(r36873, r36854, r36872, MPFR_RNDN);
        mpfr_div(r36874, r36873, r36869, MPFR_RNDN);
        mpfr_sin(r36875, r36874, MPFR_RNDN);
        mpfr_mul(r36876, r36871, r36875, MPFR_RNDN);
        mpfr_mul(r36877, r36868, r36876, MPFR_RNDN);
        if (mpfr_get_si(r36867, MPFR_RNDN)) { mpfr_set(r36878, r36877, MPFR_RNDN); } else { mpfr_set(r36878, r36865, MPFR_RNDN); };
        if (mpfr_get_si(r36856, MPFR_RNDN)) { mpfr_set(r36879, r36865, MPFR_RNDN); } else { mpfr_set(r36879, r36878, MPFR_RNDN); };
        return mpfr_get_d(r36879, MPFR_RNDN);
}

static mpfr_t r36880, r36881, r36882, r36883, r36884, r36885, r36886, r36887, r36888, r36889, r36890, r36891, r36892, r36893, r36894, r36895, r36896, r36897, r36898, r36899, r36900, r36901, r36902, r36903, r36904, r36905;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r36880);
        mpfr_init_set_str(r36881, "-0.00013580674868090203", 10, MPFR_RNDN);
        mpfr_init(r36882);
        mpfr_init(r36883);
        mpfr_init(r36884);
        mpfr_init(r36885);
        mpfr_init(r36886);
        mpfr_init(r36887);
        mpfr_init(r36888);
        mpfr_init(r36889);
        mpfr_init(r36890);
        mpfr_init(r36891);
        mpfr_init_set_str(r36892, "0.00039206272042066707", 10, MPFR_RNDN);
        mpfr_init(r36893);
        mpfr_init_set_str(r36894, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r36895, "2", 10, MPFR_RNDN);
        mpfr_init(r36896);
        mpfr_init(r36897);
        mpfr_init(r36898);
        mpfr_init(r36899);
        mpfr_init(r36900);
        mpfr_init(r36901);
        mpfr_init(r36902);
        mpfr_init(r36903);
        mpfr_init(r36904);
        mpfr_init(r36905);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r36880, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r36882, mpfr_cmp(r36880, r36881) <= 0, MPFR_RNDN);
        mpfr_set_d(r36883, x, MPFR_RNDN);
        mpfr_cos(r36884, r36883, MPFR_RNDN);
        mpfr_cos(r36885, r36880, MPFR_RNDN);
        mpfr_mul(r36886, r36884, r36885, MPFR_RNDN);
        mpfr_sin(r36887, r36883, MPFR_RNDN);
        mpfr_sin(r36888, r36880, MPFR_RNDN);
        mpfr_mul(r36889, r36887, r36888, MPFR_RNDN);
        mpfr_sub(r36890, r36886, r36889, MPFR_RNDN);
        mpfr_sub(r36891, r36890, r36884, MPFR_RNDN);
        ;
        mpfr_set_si(r36893, mpfr_cmp(r36880, r36892) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r36896, r36880, r36895, MPFR_RNDN);
        mpfr_sin(r36897, r36896, MPFR_RNDN);
        mpfr_add(r36898, r36883, r36883, MPFR_RNDN);
        mpfr_add(r36899, r36880, r36898, MPFR_RNDN);
        mpfr_div(r36900, r36899, r36895, MPFR_RNDN);
        mpfr_sin(r36901, r36900, MPFR_RNDN);
        mpfr_mul(r36902, r36897, r36901, MPFR_RNDN);
        mpfr_mul(r36903, r36894, r36902, MPFR_RNDN);
        if (mpfr_get_si(r36893, MPFR_RNDN)) { mpfr_set(r36904, r36903, MPFR_RNDN); } else { mpfr_set(r36904, r36891, MPFR_RNDN); };
        if (mpfr_get_si(r36882, MPFR_RNDN)) { mpfr_set(r36905, r36891, MPFR_RNDN); } else { mpfr_set(r36905, r36904, MPFR_RNDN); };
        return mpfr_get_d(r36905, MPFR_RNDN);
}

