#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 r25736 = x;
        float r25737 = eps;
        float r25738 = r25736 + r25737;
        float r25739 = cos(r25738);
        float r25740 = cos(r25736);
        float r25741 = r25739 - r25740;
        return r25741;
}

double f_id(double x, double eps) {
        double r25742 = x;
        double r25743 = eps;
        double r25744 = r25742 + r25743;
        double r25745 = cos(r25744);
        double r25746 = cos(r25742);
        double r25747 = r25745 - r25746;
        return r25747;
}


double f_of(float x, float eps) {
        float r25748 = -2;
        float r25749 = eps;
        float r25750 = 2;
        float r25751 = r25749 / r25750;
        float r25752 = sin(r25751);
        float r25753 = x;
        float r25754 = r25749 + r25753;
        float r25755 = r25753 + r25754;
        float r25756 = r25755 / r25750;
        float r25757 = sin(r25756);
        float r25758 = r25752 * r25757;
        float r25759 = cbrt(r25758);
        float r25760 = r25759 * r25759;
        float r25761 = r25760 * r25759;
        float r25762 = r25748 * r25761;
        float r25763 = -1.923700595105875e-10;
        bool r25764 = r25762 <= r25763;
        float r25765 = cos(r25753);
        float r25766 = cos(r25749);
        float r25767 = r25765 * r25766;
        float r25768 = sin(r25753);
        float r25769 = sin(r25749);
        float r25770 = r25768 * r25769;
        float r25771 = r25770 + r25765;
        float r25772 = r25767 - r25771;
        float r25773 = 2.5554631177229802e-09;
        bool r25774 = r25762 <= r25773;
        float r25775 = r25748 * r25758;
        float r25776 = r25767 - r25770;
        float r25777 = r25776 - r25765;
        float r25778 = r25774 ? r25775 : r25777;
        float r25779 = r25764 ? r25772 : r25778;
        return r25779;
}

double f_od(double x, double eps) {
        double r25780 = -2;
        double r25781 = eps;
        double r25782 = 2;
        double r25783 = r25781 / r25782;
        double r25784 = sin(r25783);
        double r25785 = x;
        double r25786 = r25781 + r25785;
        double r25787 = r25785 + r25786;
        double r25788 = r25787 / r25782;
        double r25789 = sin(r25788);
        double r25790 = r25784 * r25789;
        double r25791 = cbrt(r25790);
        double r25792 = r25791 * r25791;
        double r25793 = r25792 * r25791;
        double r25794 = r25780 * r25793;
        double r25795 = -1.923700595105875e-10;
        bool r25796 = r25794 <= r25795;
        double r25797 = cos(r25785);
        double r25798 = cos(r25781);
        double r25799 = r25797 * r25798;
        double r25800 = sin(r25785);
        double r25801 = sin(r25781);
        double r25802 = r25800 * r25801;
        double r25803 = r25802 + r25797;
        double r25804 = r25799 - r25803;
        double r25805 = 2.5554631177229802e-09;
        bool r25806 = r25794 <= r25805;
        double r25807 = r25780 * r25790;
        double r25808 = r25799 - r25802;
        double r25809 = r25808 - r25797;
        double r25810 = r25806 ? r25807 : r25809;
        double r25811 = r25796 ? r25804 : r25810;
        return r25811;
}

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 r25812, r25813, r25814, r25815, r25816, r25817;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r25812);
        mpfr_init(r25813);
        mpfr_init(r25814);
        mpfr_init(r25815);
        mpfr_init(r25816);
        mpfr_init(r25817);
}

double f_im(double x, double eps) {
        mpfr_set_d(r25812, x, MPFR_RNDN);
        mpfr_set_d(r25813, eps, MPFR_RNDN);
        mpfr_add(r25814, r25812, r25813, MPFR_RNDN);
        mpfr_cos(r25815, r25814, MPFR_RNDN);
        mpfr_cos(r25816, r25812, MPFR_RNDN);
        mpfr_sub(r25817, r25815, r25816, MPFR_RNDN);
        return mpfr_get_d(r25817, MPFR_RNDN);
}

static mpfr_t r25818, r25819, r25820, r25821, r25822, r25823, r25824, r25825, r25826, r25827, r25828, r25829, r25830, r25831, r25832, r25833, r25834, r25835, r25836, r25837, r25838, r25839, r25840, r25841, r25842, r25843, r25844, r25845, r25846, r25847, r25848, r25849;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r25818, "-2", 10, MPFR_RNDN);
        mpfr_init(r25819);
        mpfr_init_set_str(r25820, "2", 10, MPFR_RNDN);
        mpfr_init(r25821);
        mpfr_init(r25822);
        mpfr_init(r25823);
        mpfr_init(r25824);
        mpfr_init(r25825);
        mpfr_init(r25826);
        mpfr_init(r25827);
        mpfr_init(r25828);
        mpfr_init(r25829);
        mpfr_init(r25830);
        mpfr_init(r25831);
        mpfr_init(r25832);
        mpfr_init_set_str(r25833, "-1.923700595105875e-10", 10, MPFR_RNDN);
        mpfr_init(r25834);
        mpfr_init(r25835);
        mpfr_init(r25836);
        mpfr_init(r25837);
        mpfr_init(r25838);
        mpfr_init(r25839);
        mpfr_init(r25840);
        mpfr_init(r25841);
        mpfr_init(r25842);
        mpfr_init_set_str(r25843, "2.5554631177229802e-09", 10, MPFR_RNDN);
        mpfr_init(r25844);
        mpfr_init(r25845);
        mpfr_init(r25846);
        mpfr_init(r25847);
        mpfr_init(r25848);
        mpfr_init(r25849);
}

double f_fm(double x, double eps) {
        ;
        mpfr_set_d(r25819, eps, MPFR_RNDN);
        ;
        mpfr_div(r25821, r25819, r25820, MPFR_RNDN);
        mpfr_sin(r25822, r25821, MPFR_RNDN);
        mpfr_set_d(r25823, x, MPFR_RNDN);
        mpfr_add(r25824, r25819, r25823, MPFR_RNDN);
        mpfr_add(r25825, r25823, r25824, MPFR_RNDN);
        mpfr_div(r25826, r25825, r25820, MPFR_RNDN);
        mpfr_sin(r25827, r25826, MPFR_RNDN);
        mpfr_mul(r25828, r25822, r25827, MPFR_RNDN);
        mpfr_cbrt(r25829, r25828, MPFR_RNDN);
        mpfr_mul(r25830, r25829, r25829, MPFR_RNDN);
        mpfr_mul(r25831, r25830, r25829, MPFR_RNDN);
        mpfr_mul(r25832, r25818, r25831, MPFR_RNDN);
        ;
        mpfr_set_si(r25834, mpfr_cmp(r25832, r25833) <= 0, MPFR_RNDN);
        mpfr_cos(r25835, r25823, MPFR_RNDN);
        mpfr_cos(r25836, r25819, MPFR_RNDN);
        mpfr_mul(r25837, r25835, r25836, MPFR_RNDN);
        mpfr_sin(r25838, r25823, MPFR_RNDN);
        mpfr_sin(r25839, r25819, MPFR_RNDN);
        mpfr_mul(r25840, r25838, r25839, MPFR_RNDN);
        mpfr_add(r25841, r25840, r25835, MPFR_RNDN);
        mpfr_sub(r25842, r25837, r25841, MPFR_RNDN);
        ;
        mpfr_set_si(r25844, mpfr_cmp(r25832, r25843) <= 0, MPFR_RNDN);
        mpfr_mul(r25845, r25818, r25828, MPFR_RNDN);
        mpfr_sub(r25846, r25837, r25840, MPFR_RNDN);
        mpfr_sub(r25847, r25846, r25835, MPFR_RNDN);
        if (mpfr_get_si(r25844, MPFR_RNDN)) { mpfr_set(r25848, r25845, MPFR_RNDN); } else { mpfr_set(r25848, r25847, MPFR_RNDN); };
        if (mpfr_get_si(r25834, MPFR_RNDN)) { mpfr_set(r25849, r25842, MPFR_RNDN); } else { mpfr_set(r25849, r25848, MPFR_RNDN); };
        return mpfr_get_d(r25849, MPFR_RNDN);
}

static mpfr_t r25850, r25851, r25852, r25853, r25854, r25855, r25856, r25857, r25858, r25859, r25860, r25861, r25862, r25863, r25864, r25865, r25866, r25867, r25868, r25869, r25870, r25871, r25872, r25873, r25874, r25875, r25876, r25877, r25878, r25879, r25880, r25881;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r25850, "-2", 10, MPFR_RNDN);
        mpfr_init(r25851);
        mpfr_init_set_str(r25852, "2", 10, MPFR_RNDN);
        mpfr_init(r25853);
        mpfr_init(r25854);
        mpfr_init(r25855);
        mpfr_init(r25856);
        mpfr_init(r25857);
        mpfr_init(r25858);
        mpfr_init(r25859);
        mpfr_init(r25860);
        mpfr_init(r25861);
        mpfr_init(r25862);
        mpfr_init(r25863);
        mpfr_init(r25864);
        mpfr_init_set_str(r25865, "-1.923700595105875e-10", 10, MPFR_RNDN);
        mpfr_init(r25866);
        mpfr_init(r25867);
        mpfr_init(r25868);
        mpfr_init(r25869);
        mpfr_init(r25870);
        mpfr_init(r25871);
        mpfr_init(r25872);
        mpfr_init(r25873);
        mpfr_init(r25874);
        mpfr_init_set_str(r25875, "2.5554631177229802e-09", 10, MPFR_RNDN);
        mpfr_init(r25876);
        mpfr_init(r25877);
        mpfr_init(r25878);
        mpfr_init(r25879);
        mpfr_init(r25880);
        mpfr_init(r25881);
}

double f_dm(double x, double eps) {
        ;
        mpfr_set_d(r25851, eps, MPFR_RNDN);
        ;
        mpfr_div(r25853, r25851, r25852, MPFR_RNDN);
        mpfr_sin(r25854, r25853, MPFR_RNDN);
        mpfr_set_d(r25855, x, MPFR_RNDN);
        mpfr_add(r25856, r25851, r25855, MPFR_RNDN);
        mpfr_add(r25857, r25855, r25856, MPFR_RNDN);
        mpfr_div(r25858, r25857, r25852, MPFR_RNDN);
        mpfr_sin(r25859, r25858, MPFR_RNDN);
        mpfr_mul(r25860, r25854, r25859, MPFR_RNDN);
        mpfr_cbrt(r25861, r25860, MPFR_RNDN);
        mpfr_mul(r25862, r25861, r25861, MPFR_RNDN);
        mpfr_mul(r25863, r25862, r25861, MPFR_RNDN);
        mpfr_mul(r25864, r25850, r25863, MPFR_RNDN);
        ;
        mpfr_set_si(r25866, mpfr_cmp(r25864, r25865) <= 0, MPFR_RNDN);
        mpfr_cos(r25867, r25855, MPFR_RNDN);
        mpfr_cos(r25868, r25851, MPFR_RNDN);
        mpfr_mul(r25869, r25867, r25868, MPFR_RNDN);
        mpfr_sin(r25870, r25855, MPFR_RNDN);
        mpfr_sin(r25871, r25851, MPFR_RNDN);
        mpfr_mul(r25872, r25870, r25871, MPFR_RNDN);
        mpfr_add(r25873, r25872, r25867, MPFR_RNDN);
        mpfr_sub(r25874, r25869, r25873, MPFR_RNDN);
        ;
        mpfr_set_si(r25876, mpfr_cmp(r25864, r25875) <= 0, MPFR_RNDN);
        mpfr_mul(r25877, r25850, r25860, MPFR_RNDN);
        mpfr_sub(r25878, r25869, r25872, MPFR_RNDN);
        mpfr_sub(r25879, r25878, r25867, MPFR_RNDN);
        if (mpfr_get_si(r25876, MPFR_RNDN)) { mpfr_set(r25880, r25877, MPFR_RNDN); } else { mpfr_set(r25880, r25879, MPFR_RNDN); };
        if (mpfr_get_si(r25866, MPFR_RNDN)) { mpfr_set(r25881, r25874, MPFR_RNDN); } else { mpfr_set(r25881, r25880, MPFR_RNDN); };
        return mpfr_get_d(r25881, MPFR_RNDN);
}

