#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 r4500813 = x;
        float r4500814 = eps;
        float r4500815 = r4500813 + r4500814;
        float r4500816 = cos(r4500815);
        float r4500817 = cos(r4500813);
        float r4500818 = r4500816 - r4500817;
        return r4500818;
}

double f_id(double x, double eps) {
        double r4500819 = x;
        double r4500820 = eps;
        double r4500821 = r4500819 + r4500820;
        double r4500822 = cos(r4500821);
        double r4500823 = cos(r4500819);
        double r4500824 = r4500822 - r4500823;
        return r4500824;
}


double f_of(float x, float eps) {
        float r4500825 = eps;
        float r4500826 = -8.786347343699343e-16f;
        bool r4500827 = r4500825 <= r4500826;
        float r4500828 = x;
        float r4500829 = cos(r4500828);
        float r4500830 = cos(r4500825);
        float r4500831 = r4500829 * r4500830;
        float r4500832 = sin(r4500828);
        float r4500833 = sin(r4500825);
        float r4500834 = r4500832 * r4500833;
        float r4500835 = r4500834 + r4500829;
        float r4500836 = r4500831 - r4500835;
        float r4500837 = 3.94735216048035e-08f;
        bool r4500838 = r4500825 <= r4500837;
        float r4500839 = -2.0f;
        float r4500840 = 2.0f;
        float r4500841 = r4500825 / r4500840;
        float r4500842 = sin(r4500841);
        float r4500843 = r4500828 + r4500828;
        float r4500844 = r4500825 + r4500843;
        float r4500845 = r4500844 / r4500840;
        float r4500846 = sin(r4500845);
        float r4500847 = r4500842 * r4500846;
        float r4500848 = r4500839 * r4500847;
        float r4500849 = r4500838 ? r4500848 : r4500836;
        float r4500850 = r4500827 ? r4500836 : r4500849;
        return r4500850;
}

double f_od(double x, double eps) {
        double r4500851 = eps;
        double r4500852 = -8.786347343699343e-16;
        bool r4500853 = r4500851 <= r4500852;
        double r4500854 = x;
        double r4500855 = cos(r4500854);
        double r4500856 = cos(r4500851);
        double r4500857 = r4500855 * r4500856;
        double r4500858 = sin(r4500854);
        double r4500859 = sin(r4500851);
        double r4500860 = r4500858 * r4500859;
        double r4500861 = r4500860 + r4500855;
        double r4500862 = r4500857 - r4500861;
        double r4500863 = 3.94735216048035e-08;
        bool r4500864 = r4500851 <= r4500863;
        double r4500865 = -2.0;
        double r4500866 = 2.0;
        double r4500867 = r4500851 / r4500866;
        double r4500868 = sin(r4500867);
        double r4500869 = r4500854 + r4500854;
        double r4500870 = r4500851 + r4500869;
        double r4500871 = r4500870 / r4500866;
        double r4500872 = sin(r4500871);
        double r4500873 = r4500868 * r4500872;
        double r4500874 = r4500865 * r4500873;
        double r4500875 = r4500864 ? r4500874 : r4500862;
        double r4500876 = r4500853 ? r4500862 : r4500875;
        return r4500876;
}

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 r4500877, r4500878, r4500879, r4500880, r4500881, r4500882;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4500877);
        mpfr_init(r4500878);
        mpfr_init(r4500879);
        mpfr_init(r4500880);
        mpfr_init(r4500881);
        mpfr_init(r4500882);
}

double f_im(double x, double eps) {
        mpfr_set_d(r4500877, x, MPFR_RNDN);
        mpfr_set_d(r4500878, eps, MPFR_RNDN);
        mpfr_add(r4500879, r4500877, r4500878, MPFR_RNDN);
        mpfr_cos(r4500880, r4500879, MPFR_RNDN);
        mpfr_cos(r4500881, r4500877, MPFR_RNDN);
        mpfr_sub(r4500882, r4500880, r4500881, MPFR_RNDN);
        return mpfr_get_d(r4500882, MPFR_RNDN);
}

static mpfr_t r4500883, r4500884, r4500885, r4500886, r4500887, r4500888, r4500889, r4500890, r4500891, r4500892, r4500893, r4500894, r4500895, r4500896, r4500897, r4500898, r4500899, r4500900, r4500901, r4500902, r4500903, r4500904, r4500905, r4500906, r4500907, r4500908;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4500883);
        mpfr_init_set_str(r4500884, "-8.786347343699343e-16", 10, MPFR_RNDN);
        mpfr_init(r4500885);
        mpfr_init(r4500886);
        mpfr_init(r4500887);
        mpfr_init(r4500888);
        mpfr_init(r4500889);
        mpfr_init(r4500890);
        mpfr_init(r4500891);
        mpfr_init(r4500892);
        mpfr_init(r4500893);
        mpfr_init(r4500894);
        mpfr_init_set_str(r4500895, "3.94735216048035e-08", 10, MPFR_RNDN);
        mpfr_init(r4500896);
        mpfr_init_set_str(r4500897, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r4500898, "2", 10, MPFR_RNDN);
        mpfr_init(r4500899);
        mpfr_init(r4500900);
        mpfr_init(r4500901);
        mpfr_init(r4500902);
        mpfr_init(r4500903);
        mpfr_init(r4500904);
        mpfr_init(r4500905);
        mpfr_init(r4500906);
        mpfr_init(r4500907);
        mpfr_init(r4500908);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r4500883, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4500885, mpfr_cmp(r4500883, r4500884) <= 0, MPFR_RNDN);
        mpfr_set_d(r4500886, x, MPFR_RNDN);
        mpfr_cos(r4500887, r4500886, MPFR_RNDN);
        mpfr_cos(r4500888, r4500883, MPFR_RNDN);
        mpfr_mul(r4500889, r4500887, r4500888, MPFR_RNDN);
        mpfr_sin(r4500890, r4500886, MPFR_RNDN);
        mpfr_sin(r4500891, r4500883, MPFR_RNDN);
        mpfr_mul(r4500892, r4500890, r4500891, MPFR_RNDN);
        mpfr_add(r4500893, r4500892, r4500887, MPFR_RNDN);
        mpfr_sub(r4500894, r4500889, r4500893, MPFR_RNDN);
        ;
        mpfr_set_si(r4500896, mpfr_cmp(r4500883, r4500895) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r4500899, r4500883, r4500898, MPFR_RNDN);
        mpfr_sin(r4500900, r4500899, MPFR_RNDN);
        mpfr_add(r4500901, r4500886, r4500886, MPFR_RNDN);
        mpfr_add(r4500902, r4500883, r4500901, MPFR_RNDN);
        mpfr_div(r4500903, r4500902, r4500898, MPFR_RNDN);
        mpfr_sin(r4500904, r4500903, MPFR_RNDN);
        mpfr_mul(r4500905, r4500900, r4500904, MPFR_RNDN);
        mpfr_mul(r4500906, r4500897, r4500905, MPFR_RNDN);
        if (mpfr_get_si(r4500896, MPFR_RNDN)) { mpfr_set(r4500907, r4500906, MPFR_RNDN); } else { mpfr_set(r4500907, r4500894, MPFR_RNDN); };
        if (mpfr_get_si(r4500885, MPFR_RNDN)) { mpfr_set(r4500908, r4500894, MPFR_RNDN); } else { mpfr_set(r4500908, r4500907, MPFR_RNDN); };
        return mpfr_get_d(r4500908, MPFR_RNDN);
}

static mpfr_t r4500909, r4500910, r4500911, r4500912, r4500913, r4500914, r4500915, r4500916, r4500917, r4500918, r4500919, r4500920, r4500921, r4500922, r4500923, r4500924, r4500925, r4500926, r4500927, r4500928, r4500929, r4500930, r4500931, r4500932, r4500933, r4500934;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4500909);
        mpfr_init_set_str(r4500910, "-8.786347343699343e-16", 10, MPFR_RNDN);
        mpfr_init(r4500911);
        mpfr_init(r4500912);
        mpfr_init(r4500913);
        mpfr_init(r4500914);
        mpfr_init(r4500915);
        mpfr_init(r4500916);
        mpfr_init(r4500917);
        mpfr_init(r4500918);
        mpfr_init(r4500919);
        mpfr_init(r4500920);
        mpfr_init_set_str(r4500921, "3.94735216048035e-08", 10, MPFR_RNDN);
        mpfr_init(r4500922);
        mpfr_init_set_str(r4500923, "-2", 10, MPFR_RNDN);
        mpfr_init_set_str(r4500924, "2", 10, MPFR_RNDN);
        mpfr_init(r4500925);
        mpfr_init(r4500926);
        mpfr_init(r4500927);
        mpfr_init(r4500928);
        mpfr_init(r4500929);
        mpfr_init(r4500930);
        mpfr_init(r4500931);
        mpfr_init(r4500932);
        mpfr_init(r4500933);
        mpfr_init(r4500934);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r4500909, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4500911, mpfr_cmp(r4500909, r4500910) <= 0, MPFR_RNDN);
        mpfr_set_d(r4500912, x, MPFR_RNDN);
        mpfr_cos(r4500913, r4500912, MPFR_RNDN);
        mpfr_cos(r4500914, r4500909, MPFR_RNDN);
        mpfr_mul(r4500915, r4500913, r4500914, MPFR_RNDN);
        mpfr_sin(r4500916, r4500912, MPFR_RNDN);
        mpfr_sin(r4500917, r4500909, MPFR_RNDN);
        mpfr_mul(r4500918, r4500916, r4500917, MPFR_RNDN);
        mpfr_add(r4500919, r4500918, r4500913, MPFR_RNDN);
        mpfr_sub(r4500920, r4500915, r4500919, MPFR_RNDN);
        ;
        mpfr_set_si(r4500922, mpfr_cmp(r4500909, r4500921) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_div(r4500925, r4500909, r4500924, MPFR_RNDN);
        mpfr_sin(r4500926, r4500925, MPFR_RNDN);
        mpfr_add(r4500927, r4500912, r4500912, MPFR_RNDN);
        mpfr_add(r4500928, r4500909, r4500927, MPFR_RNDN);
        mpfr_div(r4500929, r4500928, r4500924, MPFR_RNDN);
        mpfr_sin(r4500930, r4500929, MPFR_RNDN);
        mpfr_mul(r4500931, r4500926, r4500930, MPFR_RNDN);
        mpfr_mul(r4500932, r4500923, r4500931, MPFR_RNDN);
        if (mpfr_get_si(r4500922, MPFR_RNDN)) { mpfr_set(r4500933, r4500932, MPFR_RNDN); } else { mpfr_set(r4500933, r4500920, MPFR_RNDN); };
        if (mpfr_get_si(r4500911, MPFR_RNDN)) { mpfr_set(r4500934, r4500920, MPFR_RNDN); } else { mpfr_set(r4500934, r4500933, MPFR_RNDN); };
        return mpfr_get_d(r4500934, MPFR_RNDN);
}

