#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 r25718 = x;
        float r25719 = eps;
        float r25720 = r25718 + r25719;
        float r25721 = cos(r25720);
        float r25722 = cos(r25718);
        float r25723 = r25721 - r25722;
        return r25723;
}

double f_id(double x, double eps) {
        double r25724 = x;
        double r25725 = eps;
        double r25726 = r25724 + r25725;
        double r25727 = cos(r25726);
        double r25728 = cos(r25724);
        double r25729 = r25727 - r25728;
        return r25729;
}


double f_of(float x, float eps) {
        float r25730 = -2;
        float r25731 = eps;
        float r25732 = 2;
        float r25733 = r25731 / r25732;
        float r25734 = sin(r25733);
        float r25735 = x;
        float r25736 = r25731 + r25735;
        float r25737 = r25735 + r25736;
        float r25738 = r25737 / r25732;
        float r25739 = sin(r25738);
        float r25740 = exp(r25739);
        float r25741 = log(r25740);
        float r25742 = r25734 * r25741;
        float r25743 = r25730 * r25742;
        float r25744 = -0.049319879375577316;
        bool r25745 = r25743 <= r25744;
        float r25746 = cos(r25735);
        float r25747 = cos(r25731);
        float r25748 = r25746 * r25747;
        float r25749 = sin(r25735);
        float r25750 = sin(r25731);
        float r25751 = r25749 * r25750;
        float r25752 = r25748 - r25751;
        float r25753 = r25752 - r25746;
        float r25754 = 0.0001298009043808313;
        bool r25755 = r25743 <= r25754;
        float r25756 = r25730 * r25734;
        float r25757 = expm1(r25756);
        float r25758 = log1p(r25757);
        float r25759 = r25758 * r25739;
        float r25760 = r25755 ? r25759 : r25753;
        float r25761 = r25745 ? r25753 : r25760;
        return r25761;
}

double f_od(double x, double eps) {
        double r25762 = -2;
        double r25763 = eps;
        double r25764 = 2;
        double r25765 = r25763 / r25764;
        double r25766 = sin(r25765);
        double r25767 = x;
        double r25768 = r25763 + r25767;
        double r25769 = r25767 + r25768;
        double r25770 = r25769 / r25764;
        double r25771 = sin(r25770);
        double r25772 = exp(r25771);
        double r25773 = log(r25772);
        double r25774 = r25766 * r25773;
        double r25775 = r25762 * r25774;
        double r25776 = -0.049319879375577316;
        bool r25777 = r25775 <= r25776;
        double r25778 = cos(r25767);
        double r25779 = cos(r25763);
        double r25780 = r25778 * r25779;
        double r25781 = sin(r25767);
        double r25782 = sin(r25763);
        double r25783 = r25781 * r25782;
        double r25784 = r25780 - r25783;
        double r25785 = r25784 - r25778;
        double r25786 = 0.0001298009043808313;
        bool r25787 = r25775 <= r25786;
        double r25788 = r25762 * r25766;
        double r25789 = expm1(r25788);
        double r25790 = log1p(r25789);
        double r25791 = r25790 * r25771;
        double r25792 = r25787 ? r25791 : r25785;
        double r25793 = r25777 ? r25785 : r25792;
        return r25793;
}

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 r25794, r25795, r25796, r25797, r25798, r25799;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r25794);
        mpfr_init(r25795);
        mpfr_init(r25796);
        mpfr_init(r25797);
        mpfr_init(r25798);
        mpfr_init(r25799);
}

double f_im(double x, double eps) {
        mpfr_set_d(r25794, x, MPFR_RNDN);
        mpfr_set_d(r25795, eps, MPFR_RNDN);
        mpfr_add(r25796, r25794, r25795, MPFR_RNDN);
        mpfr_cos(r25797, r25796, MPFR_RNDN);
        mpfr_cos(r25798, r25794, MPFR_RNDN);
        mpfr_sub(r25799, r25797, r25798, MPFR_RNDN);
        return mpfr_get_d(r25799, MPFR_RNDN);
}

static mpfr_t r25800, r25801, r25802, r25803, r25804, r25805, r25806, r25807, r25808, r25809, r25810, r25811, r25812, r25813, r25814, r25815, r25816, r25817, r25818, r25819, r25820, r25821, r25822, r25823, r25824, r25825, r25826, r25827, r25828, r25829, r25830, r25831;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r25800, "-2", 10, MPFR_RNDN);
        mpfr_init(r25801);
        mpfr_init_set_str(r25802, "2", 10, MPFR_RNDN);
        mpfr_init(r25803);
        mpfr_init(r25804);
        mpfr_init(r25805);
        mpfr_init(r25806);
        mpfr_init(r25807);
        mpfr_init(r25808);
        mpfr_init(r25809);
        mpfr_init(r25810);
        mpfr_init(r25811);
        mpfr_init(r25812);
        mpfr_init(r25813);
        mpfr_init_set_str(r25814, "-0.049319879375577316", 10, MPFR_RNDN);
        mpfr_init(r25815);
        mpfr_init(r25816);
        mpfr_init(r25817);
        mpfr_init(r25818);
        mpfr_init(r25819);
        mpfr_init(r25820);
        mpfr_init(r25821);
        mpfr_init(r25822);
        mpfr_init(r25823);
        mpfr_init_set_str(r25824, "0.0001298009043808313", 10, MPFR_RNDN);
        mpfr_init(r25825);
        mpfr_init(r25826);
        mpfr_init(r25827);
        mpfr_init(r25828);
        mpfr_init(r25829);
        mpfr_init(r25830);
        mpfr_init(r25831);
}

double f_fm(double x, double eps) {
        ;
        mpfr_set_d(r25801, eps, MPFR_RNDN);
        ;
        mpfr_div(r25803, r25801, r25802, MPFR_RNDN);
        mpfr_sin(r25804, r25803, MPFR_RNDN);
        mpfr_set_d(r25805, x, MPFR_RNDN);
        mpfr_add(r25806, r25801, r25805, MPFR_RNDN);
        mpfr_add(r25807, r25805, r25806, MPFR_RNDN);
        mpfr_div(r25808, r25807, r25802, MPFR_RNDN);
        mpfr_sin(r25809, r25808, MPFR_RNDN);
        mpfr_exp(r25810, r25809, MPFR_RNDN);
        mpfr_log(r25811, r25810, MPFR_RNDN);
        mpfr_mul(r25812, r25804, r25811, MPFR_RNDN);
        mpfr_mul(r25813, r25800, r25812, MPFR_RNDN);
        ;
        mpfr_set_si(r25815, mpfr_cmp(r25813, r25814) <= 0, MPFR_RNDN);
        mpfr_cos(r25816, r25805, MPFR_RNDN);
        mpfr_cos(r25817, r25801, MPFR_RNDN);
        mpfr_mul(r25818, r25816, r25817, MPFR_RNDN);
        mpfr_sin(r25819, r25805, MPFR_RNDN);
        mpfr_sin(r25820, r25801, MPFR_RNDN);
        mpfr_mul(r25821, r25819, r25820, MPFR_RNDN);
        mpfr_sub(r25822, r25818, r25821, MPFR_RNDN);
        mpfr_sub(r25823, r25822, r25816, MPFR_RNDN);
        ;
        mpfr_set_si(r25825, mpfr_cmp(r25813, r25824) <= 0, MPFR_RNDN);
        mpfr_mul(r25826, r25800, r25804, MPFR_RNDN);
        mpfr_expm1(r25827, r25826, MPFR_RNDN);
        mpfr_log1p(r25828, r25827, MPFR_RNDN);
        mpfr_mul(r25829, r25828, r25809, MPFR_RNDN);
        if (mpfr_get_si(r25825, MPFR_RNDN)) { mpfr_set(r25830, r25829, MPFR_RNDN); } else { mpfr_set(r25830, r25823, MPFR_RNDN); };
        if (mpfr_get_si(r25815, MPFR_RNDN)) { mpfr_set(r25831, r25823, MPFR_RNDN); } else { mpfr_set(r25831, r25830, MPFR_RNDN); };
        return mpfr_get_d(r25831, MPFR_RNDN);
}

static mpfr_t r25832, r25833, r25834, r25835, r25836, r25837, r25838, r25839, r25840, r25841, r25842, r25843, r25844, r25845, r25846, r25847, r25848, r25849, r25850, r25851, r25852, r25853, r25854, r25855, r25856, r25857, r25858, r25859, r25860, r25861, r25862, r25863;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r25832, "-2", 10, MPFR_RNDN);
        mpfr_init(r25833);
        mpfr_init_set_str(r25834, "2", 10, MPFR_RNDN);
        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(r25843);
        mpfr_init(r25844);
        mpfr_init(r25845);
        mpfr_init_set_str(r25846, "-0.049319879375577316", 10, MPFR_RNDN);
        mpfr_init(r25847);
        mpfr_init(r25848);
        mpfr_init(r25849);
        mpfr_init(r25850);
        mpfr_init(r25851);
        mpfr_init(r25852);
        mpfr_init(r25853);
        mpfr_init(r25854);
        mpfr_init(r25855);
        mpfr_init_set_str(r25856, "0.0001298009043808313", 10, MPFR_RNDN);
        mpfr_init(r25857);
        mpfr_init(r25858);
        mpfr_init(r25859);
        mpfr_init(r25860);
        mpfr_init(r25861);
        mpfr_init(r25862);
        mpfr_init(r25863);
}

double f_dm(double x, double eps) {
        ;
        mpfr_set_d(r25833, eps, MPFR_RNDN);
        ;
        mpfr_div(r25835, r25833, r25834, MPFR_RNDN);
        mpfr_sin(r25836, r25835, MPFR_RNDN);
        mpfr_set_d(r25837, x, MPFR_RNDN);
        mpfr_add(r25838, r25833, r25837, MPFR_RNDN);
        mpfr_add(r25839, r25837, r25838, MPFR_RNDN);
        mpfr_div(r25840, r25839, r25834, MPFR_RNDN);
        mpfr_sin(r25841, r25840, MPFR_RNDN);
        mpfr_exp(r25842, r25841, MPFR_RNDN);
        mpfr_log(r25843, r25842, MPFR_RNDN);
        mpfr_mul(r25844, r25836, r25843, MPFR_RNDN);
        mpfr_mul(r25845, r25832, r25844, MPFR_RNDN);
        ;
        mpfr_set_si(r25847, mpfr_cmp(r25845, r25846) <= 0, MPFR_RNDN);
        mpfr_cos(r25848, r25837, MPFR_RNDN);
        mpfr_cos(r25849, r25833, MPFR_RNDN);
        mpfr_mul(r25850, r25848, r25849, MPFR_RNDN);
        mpfr_sin(r25851, r25837, MPFR_RNDN);
        mpfr_sin(r25852, r25833, MPFR_RNDN);
        mpfr_mul(r25853, r25851, r25852, MPFR_RNDN);
        mpfr_sub(r25854, r25850, r25853, MPFR_RNDN);
        mpfr_sub(r25855, r25854, r25848, MPFR_RNDN);
        ;
        mpfr_set_si(r25857, mpfr_cmp(r25845, r25856) <= 0, MPFR_RNDN);
        mpfr_mul(r25858, r25832, r25836, MPFR_RNDN);
        mpfr_expm1(r25859, r25858, MPFR_RNDN);
        mpfr_log1p(r25860, r25859, MPFR_RNDN);
        mpfr_mul(r25861, r25860, r25841, MPFR_RNDN);
        if (mpfr_get_si(r25857, MPFR_RNDN)) { mpfr_set(r25862, r25861, MPFR_RNDN); } else { mpfr_set(r25862, r25855, MPFR_RNDN); };
        if (mpfr_get_si(r25847, MPFR_RNDN)) { mpfr_set(r25863, r25855, MPFR_RNDN); } else { mpfr_set(r25863, r25862, MPFR_RNDN); };
        return mpfr_get_d(r25863, MPFR_RNDN);
}

