#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "cos2 (problem 3.4.1)";

double f_if(float x) {
        float r18900 = 1.0f;
        float r18901 = x;
        float r18902 = cos(r18901);
        float r18903 = r18900 - r18902;
        float r18904 = r18901 * r18901;
        float r18905 = r18903 / r18904;
        return r18905;
}

double f_id(double x) {
        double r18906 = 1.0;
        double r18907 = x;
        double r18908 = cos(r18907);
        double r18909 = r18906 - r18908;
        double r18910 = r18907 * r18907;
        double r18911 = r18909 / r18910;
        return r18911;
}


double f_of(float x) {
        float r18912 = x;
        float r18913 = -1.2745508074835617e-14f;
        bool r18914 = r18912 <= r18913;
        float r18915 = sin(r18912);
        float r18916 = r18915 * r18915;
        float r18917 = r18916 / r18912;
        float r18918 = 1.0f;
        float r18919 = cos(r18912);
        float r18920 = 3.0f;
        float r18921 = pow(r18919, r18920);
        float r18922 = r18918 + r18921;
        float r18923 = r18917 / r18922;
        float r18924 = r18918 - r18919;
        float r18925 = r18919 * r18919;
        float r18926 = r18924 + r18925;
        float r18927 = r18926 / r18912;
        float r18928 = r18923 * r18927;
        float r18929 = 1850694803779224.5f;
        bool r18930 = r18912 <= r18929;
        float r18931 = 0.5f;
        float r18932 = 0.001388888888888889f;
        float r18933 = 4.0f;
        float r18934 = pow(r18912, r18933);
        float r18935 = r18932 * r18934;
        float r18936 = r18931 + r18935;
        float r18937 = 0.041666666666666664f;
        float r18938 = 2.0f;
        float r18939 = pow(r18912, r18938);
        float r18940 = r18937 * r18939;
        float r18941 = r18936 - r18940;
        float r18942 = r18930 ? r18941 : r18928;
        float r18943 = r18914 ? r18928 : r18942;
        return r18943;
}

double f_od(double x) {
        double r18944 = x;
        double r18945 = -1.2745508074835617e-14;
        bool r18946 = r18944 <= r18945;
        double r18947 = sin(r18944);
        double r18948 = r18947 * r18947;
        double r18949 = r18948 / r18944;
        double r18950 = 1.0;
        double r18951 = cos(r18944);
        double r18952 = 3.0;
        double r18953 = pow(r18951, r18952);
        double r18954 = r18950 + r18953;
        double r18955 = r18949 / r18954;
        double r18956 = r18950 - r18951;
        double r18957 = r18951 * r18951;
        double r18958 = r18956 + r18957;
        double r18959 = r18958 / r18944;
        double r18960 = r18955 * r18959;
        double r18961 = 1850694803779224.5;
        bool r18962 = r18944 <= r18961;
        double r18963 = 0.5;
        double r18964 = 0.001388888888888889;
        double r18965 = 4.0;
        double r18966 = pow(r18944, r18965);
        double r18967 = r18964 * r18966;
        double r18968 = r18963 + r18967;
        double r18969 = 0.041666666666666664;
        double r18970 = 2.0;
        double r18971 = pow(r18944, r18970);
        double r18972 = r18969 * r18971;
        double r18973 = r18968 - r18972;
        double r18974 = r18962 ? r18973 : r18960;
        double r18975 = r18946 ? r18960 : r18974;
        return r18975;
}

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 r18976, r18977, r18978, r18979, r18980, r18981;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r18976, "1", 10, MPFR_RNDN);
        mpfr_init(r18977);
        mpfr_init(r18978);
        mpfr_init(r18979);
        mpfr_init(r18980);
        mpfr_init(r18981);
}

double f_im(double x) {
        ;
        mpfr_set_d(r18977, x, MPFR_RNDN);
        mpfr_cos(r18978, r18977, MPFR_RNDN);
        mpfr_sub(r18979, r18976, r18978, MPFR_RNDN);
        mpfr_sqr(r18980, r18977, MPFR_RNDN);
        mpfr_div(r18981, r18979, r18980, MPFR_RNDN);
        return mpfr_get_d(r18981, MPFR_RNDN);
}

static mpfr_t r18982, r18983, r18984, r18985, r18986, r18987, r18988, r18989, r18990, r18991, r18992, r18993, r18994, r18995, r18996, r18997, r18998, r18999, r19000, r19001, r19002, r19003, r19004, r19005, r19006, r19007, r19008, r19009, r19010, r19011, r19012, r19013;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r18982);
        mpfr_init_set_str(r18983, "-1.2745508074835617e-14", 10, MPFR_RNDN);
        mpfr_init(r18984);
        mpfr_init(r18985);
        mpfr_init(r18986);
        mpfr_init(r18987);
        mpfr_init_set_str(r18988, "1", 10, MPFR_RNDN);
        mpfr_init(r18989);
        mpfr_init_set_str(r18990, "3", 10, MPFR_RNDN);
        mpfr_init(r18991);
        mpfr_init(r18992);
        mpfr_init(r18993);
        mpfr_init(r18994);
        mpfr_init(r18995);
        mpfr_init(r18996);
        mpfr_init(r18997);
        mpfr_init(r18998);
        mpfr_init_set_str(r18999, "1850694803779224.5", 10, MPFR_RNDN);
        mpfr_init(r19000);
        mpfr_init_set_str(r19001, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r19002, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r19003, "4", 10, MPFR_RNDN);
        mpfr_init(r19004);
        mpfr_init(r19005);
        mpfr_init(r19006);
        mpfr_init_set_str(r19007, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r19008, "2", 10, MPFR_RNDN);
        mpfr_init(r19009);
        mpfr_init(r19010);
        mpfr_init(r19011);
        mpfr_init(r19012);
        mpfr_init(r19013);
}

double f_fm(double x) {
        mpfr_set_d(r18982, x, MPFR_RNDN);
        ;
        mpfr_set_si(r18984, mpfr_cmp(r18982, r18983) <= 0, MPFR_RNDN);
        mpfr_sin(r18985, r18982, MPFR_RNDN);
        mpfr_mul(r18986, r18985, r18985, MPFR_RNDN);
        mpfr_div(r18987, r18986, r18982, MPFR_RNDN);
        ;
        mpfr_cos(r18989, r18982, MPFR_RNDN);
        ;
        mpfr_pow(r18991, r18989, r18990, MPFR_RNDN);
        mpfr_add(r18992, r18988, r18991, MPFR_RNDN);
        mpfr_div(r18993, r18987, r18992, MPFR_RNDN);
        mpfr_sub(r18994, r18988, r18989, MPFR_RNDN);
        mpfr_mul(r18995, r18989, r18989, MPFR_RNDN);
        mpfr_add(r18996, r18994, r18995, MPFR_RNDN);
        mpfr_div(r18997, r18996, r18982, MPFR_RNDN);
        mpfr_mul(r18998, r18993, r18997, MPFR_RNDN);
        ;
        mpfr_set_si(r19000, mpfr_cmp(r18982, r18999) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r19004, r18982, r19003, MPFR_RNDN);
        mpfr_mul(r19005, r19002, r19004, MPFR_RNDN);
        mpfr_add(r19006, r19001, r19005, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r19009, r18982, r19008, MPFR_RNDN);
        mpfr_mul(r19010, r19007, r19009, MPFR_RNDN);
        mpfr_sub(r19011, r19006, r19010, MPFR_RNDN);
        if (mpfr_get_si(r19000, MPFR_RNDN)) { mpfr_set(r19012, r19011, MPFR_RNDN); } else { mpfr_set(r19012, r18998, MPFR_RNDN); };
        if (mpfr_get_si(r18984, MPFR_RNDN)) { mpfr_set(r19013, r18998, MPFR_RNDN); } else { mpfr_set(r19013, r19012, MPFR_RNDN); };
        return mpfr_get_d(r19013, MPFR_RNDN);
}

static mpfr_t r19014, r19015, r19016, r19017, r19018, r19019, r19020, r19021, r19022, r19023, r19024, r19025, r19026, r19027, r19028, r19029, r19030, r19031, r19032, r19033, r19034, r19035, r19036, r19037, r19038, r19039, r19040, r19041, r19042, r19043, r19044, r19045;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19014);
        mpfr_init_set_str(r19015, "-1.2745508074835617e-14", 10, MPFR_RNDN);
        mpfr_init(r19016);
        mpfr_init(r19017);
        mpfr_init(r19018);
        mpfr_init(r19019);
        mpfr_init_set_str(r19020, "1", 10, MPFR_RNDN);
        mpfr_init(r19021);
        mpfr_init_set_str(r19022, "3", 10, MPFR_RNDN);
        mpfr_init(r19023);
        mpfr_init(r19024);
        mpfr_init(r19025);
        mpfr_init(r19026);
        mpfr_init(r19027);
        mpfr_init(r19028);
        mpfr_init(r19029);
        mpfr_init(r19030);
        mpfr_init_set_str(r19031, "1850694803779224.5", 10, MPFR_RNDN);
        mpfr_init(r19032);
        mpfr_init_set_str(r19033, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r19034, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r19035, "4", 10, MPFR_RNDN);
        mpfr_init(r19036);
        mpfr_init(r19037);
        mpfr_init(r19038);
        mpfr_init_set_str(r19039, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r19040, "2", 10, MPFR_RNDN);
        mpfr_init(r19041);
        mpfr_init(r19042);
        mpfr_init(r19043);
        mpfr_init(r19044);
        mpfr_init(r19045);
}

double f_dm(double x) {
        mpfr_set_d(r19014, x, MPFR_RNDN);
        ;
        mpfr_set_si(r19016, mpfr_cmp(r19014, r19015) <= 0, MPFR_RNDN);
        mpfr_sin(r19017, r19014, MPFR_RNDN);
        mpfr_mul(r19018, r19017, r19017, MPFR_RNDN);
        mpfr_div(r19019, r19018, r19014, MPFR_RNDN);
        ;
        mpfr_cos(r19021, r19014, MPFR_RNDN);
        ;
        mpfr_pow(r19023, r19021, r19022, MPFR_RNDN);
        mpfr_add(r19024, r19020, r19023, MPFR_RNDN);
        mpfr_div(r19025, r19019, r19024, MPFR_RNDN);
        mpfr_sub(r19026, r19020, r19021, MPFR_RNDN);
        mpfr_mul(r19027, r19021, r19021, MPFR_RNDN);
        mpfr_add(r19028, r19026, r19027, MPFR_RNDN);
        mpfr_div(r19029, r19028, r19014, MPFR_RNDN);
        mpfr_mul(r19030, r19025, r19029, MPFR_RNDN);
        ;
        mpfr_set_si(r19032, mpfr_cmp(r19014, r19031) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r19036, r19014, r19035, MPFR_RNDN);
        mpfr_mul(r19037, r19034, r19036, MPFR_RNDN);
        mpfr_add(r19038, r19033, r19037, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r19041, r19014, r19040, MPFR_RNDN);
        mpfr_mul(r19042, r19039, r19041, MPFR_RNDN);
        mpfr_sub(r19043, r19038, r19042, MPFR_RNDN);
        if (mpfr_get_si(r19032, MPFR_RNDN)) { mpfr_set(r19044, r19043, MPFR_RNDN); } else { mpfr_set(r19044, r19030, MPFR_RNDN); };
        if (mpfr_get_si(r19016, MPFR_RNDN)) { mpfr_set(r19045, r19030, MPFR_RNDN); } else { mpfr_set(r19045, r19044, MPFR_RNDN); };
        return mpfr_get_d(r19045, MPFR_RNDN);
}

