#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 r9832 = x;
        float r9833 = eps;
        float r9834 = r9832 + r9833;
        float r9835 = cos(r9834);
        float r9836 = cos(r9832);
        float r9837 = r9835 - r9836;
        return r9837;
}

double f_id(double x, double eps) {
        double r9838 = x;
        double r9839 = eps;
        double r9840 = r9838 + r9839;
        double r9841 = cos(r9840);
        double r9842 = cos(r9838);
        double r9843 = r9841 - r9842;
        return r9843;
}


double f_of(float x, float eps) {
        float r9844 = eps;
        float r9845 = x;
        float r9846 = r9845 + r9845;
        float r9847 = r9844 + r9846;
        float r9848 = 2;
        float r9849 = r9847 / r9848;
        float r9850 = sin(r9849);
        float r9851 = r9844 / r9848;
        float r9852 = sin(r9851);
        float r9853 = cbrt(r9852);
        float r9854 = r9853 * r9853;
        float r9855 = r9850 * r9854;
        float r9856 = r9855 * r9853;
        float r9857 = -2.5065994025001616e-07;
        bool r9858 = r9856 <= r9857;
        float r9859 = cos(r9845);
        float r9860 = cos(r9844);
        float r9861 = r9859 * r9860;
        float r9862 = sin(r9844);
        float r9863 = sin(r9845);
        float r9864 = fma(r9862, r9863, r9859);
        float r9865 = r9861 - r9864;
        float r9866 = 0.0278628380812515;
        bool r9867 = r9856 <= r9866;
        float r9868 = -2;
        float r9869 = r9868 * r9850;
        float r9870 = r9869 * r9852;
        float r9871 = r9863 * r9862;
        float r9872 = r9861 - r9871;
        float r9873 = r9872 - r9859;
        float r9874 = r9867 ? r9870 : r9873;
        float r9875 = r9858 ? r9865 : r9874;
        return r9875;
}

double f_od(double x, double eps) {
        double r9876 = eps;
        double r9877 = x;
        double r9878 = r9877 + r9877;
        double r9879 = r9876 + r9878;
        double r9880 = 2;
        double r9881 = r9879 / r9880;
        double r9882 = sin(r9881);
        double r9883 = r9876 / r9880;
        double r9884 = sin(r9883);
        double r9885 = cbrt(r9884);
        double r9886 = r9885 * r9885;
        double r9887 = r9882 * r9886;
        double r9888 = r9887 * r9885;
        double r9889 = -2.5065994025001616e-07;
        bool r9890 = r9888 <= r9889;
        double r9891 = cos(r9877);
        double r9892 = cos(r9876);
        double r9893 = r9891 * r9892;
        double r9894 = sin(r9876);
        double r9895 = sin(r9877);
        double r9896 = fma(r9894, r9895, r9891);
        double r9897 = r9893 - r9896;
        double r9898 = 0.0278628380812515;
        bool r9899 = r9888 <= r9898;
        double r9900 = -2;
        double r9901 = r9900 * r9882;
        double r9902 = r9901 * r9884;
        double r9903 = r9895 * r9894;
        double r9904 = r9893 - r9903;
        double r9905 = r9904 - r9891;
        double r9906 = r9899 ? r9902 : r9905;
        double r9907 = r9890 ? r9897 : r9906;
        return r9907;
}

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 r9908, r9909, r9910, r9911, r9912, r9913;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9908);
        mpfr_init(r9909);
        mpfr_init(r9910);
        mpfr_init(r9911);
        mpfr_init(r9912);
        mpfr_init(r9913);
}

double f_im(double x, double eps) {
        mpfr_set_d(r9908, x, MPFR_RNDN);
        mpfr_set_d(r9909, eps, MPFR_RNDN);
        mpfr_add(r9910, r9908, r9909, MPFR_RNDN);
        mpfr_cos(r9911, r9910, MPFR_RNDN);
        mpfr_cos(r9912, r9908, MPFR_RNDN);
        mpfr_sub(r9913, r9911, r9912, MPFR_RNDN);
        return mpfr_get_d(r9913, MPFR_RNDN);
}

static mpfr_t r9914, r9915, r9916, r9917, r9918, r9919, r9920, r9921, r9922, r9923, r9924, r9925, r9926, r9927, r9928, r9929, r9930, r9931, r9932, r9933, r9934, r9935, r9936, r9937, r9938, r9939, r9940, r9941, r9942, r9943, r9944, r9945;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9914);
        mpfr_init(r9915);
        mpfr_init(r9916);
        mpfr_init(r9917);
        mpfr_init_set_str(r9918, "2", 10, MPFR_RNDN);
        mpfr_init(r9919);
        mpfr_init(r9920);
        mpfr_init(r9921);
        mpfr_init(r9922);
        mpfr_init(r9923);
        mpfr_init(r9924);
        mpfr_init(r9925);
        mpfr_init(r9926);
        mpfr_init_set_str(r9927, "-2.5065994025001616e-07", 10, MPFR_RNDN);
        mpfr_init(r9928);
        mpfr_init(r9929);
        mpfr_init(r9930);
        mpfr_init(r9931);
        mpfr_init(r9932);
        mpfr_init(r9933);
        mpfr_init(r9934);
        mpfr_init(r9935);
        mpfr_init_set_str(r9936, "0.0278628380812515", 10, MPFR_RNDN);
        mpfr_init(r9937);
        mpfr_init_set_str(r9938, "-2", 10, MPFR_RNDN);
        mpfr_init(r9939);
        mpfr_init(r9940);
        mpfr_init(r9941);
        mpfr_init(r9942);
        mpfr_init(r9943);
        mpfr_init(r9944);
        mpfr_init(r9945);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r9914, eps, MPFR_RNDN);
        mpfr_set_d(r9915, x, MPFR_RNDN);
        mpfr_add(r9916, r9915, r9915, MPFR_RNDN);
        mpfr_add(r9917, r9914, r9916, MPFR_RNDN);
        ;
        mpfr_div(r9919, r9917, r9918, MPFR_RNDN);
        mpfr_sin(r9920, r9919, MPFR_RNDN);
        mpfr_div(r9921, r9914, r9918, MPFR_RNDN);
        mpfr_sin(r9922, r9921, MPFR_RNDN);
        mpfr_cbrt(r9923, r9922, MPFR_RNDN);
        mpfr_mul(r9924, r9923, r9923, MPFR_RNDN);
        mpfr_mul(r9925, r9920, r9924, MPFR_RNDN);
        mpfr_mul(r9926, r9925, r9923, MPFR_RNDN);
        ;
        mpfr_set_si(r9928, mpfr_cmp(r9926, r9927) <= 0, MPFR_RNDN);
        mpfr_cos(r9929, r9915, MPFR_RNDN);
        mpfr_cos(r9930, r9914, MPFR_RNDN);
        mpfr_mul(r9931, r9929, r9930, MPFR_RNDN);
        mpfr_sin(r9932, r9914, MPFR_RNDN);
        mpfr_sin(r9933, r9915, MPFR_RNDN);
        mpfr_fma(r9934, r9932, r9933, r9929, MPFR_RNDN);
        mpfr_sub(r9935, r9931, r9934, MPFR_RNDN);
        ;
        mpfr_set_si(r9937, mpfr_cmp(r9926, r9936) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r9939, r9938, r9920, MPFR_RNDN);
        mpfr_mul(r9940, r9939, r9922, MPFR_RNDN);
        mpfr_mul(r9941, r9933, r9932, MPFR_RNDN);
        mpfr_sub(r9942, r9931, r9941, MPFR_RNDN);
        mpfr_sub(r9943, r9942, r9929, MPFR_RNDN);
        if (mpfr_get_si(r9937, MPFR_RNDN)) { mpfr_set(r9944, r9940, MPFR_RNDN); } else { mpfr_set(r9944, r9943, MPFR_RNDN); };
        if (mpfr_get_si(r9928, MPFR_RNDN)) { mpfr_set(r9945, r9935, MPFR_RNDN); } else { mpfr_set(r9945, r9944, MPFR_RNDN); };
        return mpfr_get_d(r9945, MPFR_RNDN);
}

static mpfr_t r9946, r9947, r9948, r9949, r9950, r9951, r9952, r9953, r9954, r9955, r9956, r9957, r9958, r9959, r9960, r9961, r9962, r9963, r9964, r9965, r9966, r9967, r9968, r9969, r9970, r9971, r9972, r9973, r9974, r9975, r9976, r9977;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9946);
        mpfr_init(r9947);
        mpfr_init(r9948);
        mpfr_init(r9949);
        mpfr_init_set_str(r9950, "2", 10, MPFR_RNDN);
        mpfr_init(r9951);
        mpfr_init(r9952);
        mpfr_init(r9953);
        mpfr_init(r9954);
        mpfr_init(r9955);
        mpfr_init(r9956);
        mpfr_init(r9957);
        mpfr_init(r9958);
        mpfr_init_set_str(r9959, "-2.5065994025001616e-07", 10, MPFR_RNDN);
        mpfr_init(r9960);
        mpfr_init(r9961);
        mpfr_init(r9962);
        mpfr_init(r9963);
        mpfr_init(r9964);
        mpfr_init(r9965);
        mpfr_init(r9966);
        mpfr_init(r9967);
        mpfr_init_set_str(r9968, "0.0278628380812515", 10, MPFR_RNDN);
        mpfr_init(r9969);
        mpfr_init_set_str(r9970, "-2", 10, MPFR_RNDN);
        mpfr_init(r9971);
        mpfr_init(r9972);
        mpfr_init(r9973);
        mpfr_init(r9974);
        mpfr_init(r9975);
        mpfr_init(r9976);
        mpfr_init(r9977);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r9946, eps, MPFR_RNDN);
        mpfr_set_d(r9947, x, MPFR_RNDN);
        mpfr_add(r9948, r9947, r9947, MPFR_RNDN);
        mpfr_add(r9949, r9946, r9948, MPFR_RNDN);
        ;
        mpfr_div(r9951, r9949, r9950, MPFR_RNDN);
        mpfr_sin(r9952, r9951, MPFR_RNDN);
        mpfr_div(r9953, r9946, r9950, MPFR_RNDN);
        mpfr_sin(r9954, r9953, MPFR_RNDN);
        mpfr_cbrt(r9955, r9954, MPFR_RNDN);
        mpfr_mul(r9956, r9955, r9955, MPFR_RNDN);
        mpfr_mul(r9957, r9952, r9956, MPFR_RNDN);
        mpfr_mul(r9958, r9957, r9955, MPFR_RNDN);
        ;
        mpfr_set_si(r9960, mpfr_cmp(r9958, r9959) <= 0, MPFR_RNDN);
        mpfr_cos(r9961, r9947, MPFR_RNDN);
        mpfr_cos(r9962, r9946, MPFR_RNDN);
        mpfr_mul(r9963, r9961, r9962, MPFR_RNDN);
        mpfr_sin(r9964, r9946, MPFR_RNDN);
        mpfr_sin(r9965, r9947, MPFR_RNDN);
        mpfr_fma(r9966, r9964, r9965, r9961, MPFR_RNDN);
        mpfr_sub(r9967, r9963, r9966, MPFR_RNDN);
        ;
        mpfr_set_si(r9969, mpfr_cmp(r9958, r9968) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r9971, r9970, r9952, MPFR_RNDN);
        mpfr_mul(r9972, r9971, r9954, MPFR_RNDN);
        mpfr_mul(r9973, r9965, r9964, MPFR_RNDN);
        mpfr_sub(r9974, r9963, r9973, MPFR_RNDN);
        mpfr_sub(r9975, r9974, r9961, MPFR_RNDN);
        if (mpfr_get_si(r9969, MPFR_RNDN)) { mpfr_set(r9976, r9972, MPFR_RNDN); } else { mpfr_set(r9976, r9975, MPFR_RNDN); };
        if (mpfr_get_si(r9960, MPFR_RNDN)) { mpfr_set(r9977, r9967, MPFR_RNDN); } else { mpfr_set(r9977, r9976, MPFR_RNDN); };
        return mpfr_get_d(r9977, MPFR_RNDN);
}

