#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 r20905 = 1;
        float r20906 = x;
        float r20907 = cos(r20906);
        float r20908 = r20905 - r20907;
        float r20909 = r20906 * r20906;
        float r20910 = r20908 / r20909;
        return r20910;
}

double f_id(double x) {
        double r20911 = 1;
        double r20912 = x;
        double r20913 = cos(r20912);
        double r20914 = r20911 - r20913;
        double r20915 = r20912 * r20912;
        double r20916 = r20914 / r20915;
        return r20916;
}


double f_of(float x) {
        float r20917 = x;
        float r20918 = -0.03501520358199328;
        bool r20919 = r20917 <= r20918;
        float r20920 = 1;
        float r20921 = r20920 / r20917;
        float r20922 = cos(r20917);
        float r20923 = r20920 - r20922;
        float r20924 = r20923 / r20917;
        float r20925 = r20921 * r20924;
        float r20926 = 3.0820637776628553e-06;
        bool r20927 = r20917 <= r20926;
        float r20928 = 1/2;
        float r20929 = 1/720;
        float r20930 = 4;
        float r20931 = pow(r20917, r20930);
        float r20932 = r20929 * r20931;
        float r20933 = r20928 + r20932;
        float r20934 = 1/24;
        float r20935 = 2;
        float r20936 = pow(r20917, r20935);
        float r20937 = r20934 * r20936;
        float r20938 = r20933 - r20937;
        float r20939 = sin(r20917);
        float r20940 = r20939 * r20939;
        float r20941 = r20920 + r20922;
        float r20942 = r20940 / r20941;
        float r20943 = sqrt(r20942);
        float r20944 = r20943 / r20917;
        float r20945 = r20944 * r20944;
        float r20946 = r20927 ? r20938 : r20945;
        float r20947 = r20919 ? r20925 : r20946;
        return r20947;
}

double f_od(double x) {
        double r20948 = x;
        double r20949 = -0.03501520358199328;
        bool r20950 = r20948 <= r20949;
        double r20951 = 1;
        double r20952 = r20951 / r20948;
        double r20953 = cos(r20948);
        double r20954 = r20951 - r20953;
        double r20955 = r20954 / r20948;
        double r20956 = r20952 * r20955;
        double r20957 = 3.0820637776628553e-06;
        bool r20958 = r20948 <= r20957;
        double r20959 = 1/2;
        double r20960 = 1/720;
        double r20961 = 4;
        double r20962 = pow(r20948, r20961);
        double r20963 = r20960 * r20962;
        double r20964 = r20959 + r20963;
        double r20965 = 1/24;
        double r20966 = 2;
        double r20967 = pow(r20948, r20966);
        double r20968 = r20965 * r20967;
        double r20969 = r20964 - r20968;
        double r20970 = sin(r20948);
        double r20971 = r20970 * r20970;
        double r20972 = r20951 + r20953;
        double r20973 = r20971 / r20972;
        double r20974 = sqrt(r20973);
        double r20975 = r20974 / r20948;
        double r20976 = r20975 * r20975;
        double r20977 = r20958 ? r20969 : r20976;
        double r20978 = r20950 ? r20956 : r20977;
        return r20978;
}

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 r20979, r20980, r20981, r20982, r20983, r20984;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r20979, "1", 10, MPFR_RNDN);
        mpfr_init(r20980);
        mpfr_init(r20981);
        mpfr_init(r20982);
        mpfr_init(r20983);
        mpfr_init(r20984);
}

double f_im(double x) {
        ;
        mpfr_set_d(r20980, x, MPFR_RNDN);
        mpfr_cos(r20981, r20980, MPFR_RNDN);
        mpfr_sub(r20982, r20979, r20981, MPFR_RNDN);
        mpfr_mul(r20983, r20980, r20980, MPFR_RNDN);
        mpfr_div(r20984, r20982, r20983, MPFR_RNDN);
        return mpfr_get_d(r20984, MPFR_RNDN);
}

static mpfr_t r20985, r20986, r20987, r20988, r20989, r20990, r20991, r20992, r20993, r20994, r20995, r20996, r20997, r20998, r20999, r21000, r21001, r21002, r21003, r21004, r21005, r21006, r21007, r21008, r21009, r21010, r21011, r21012, r21013, r21014, r21015;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r20985);
        mpfr_init_set_str(r20986, "-0.03501520358199328", 10, MPFR_RNDN);
        mpfr_init(r20987);
        mpfr_init_set_str(r20988, "1", 10, MPFR_RNDN);
        mpfr_init(r20989);
        mpfr_init(r20990);
        mpfr_init(r20991);
        mpfr_init(r20992);
        mpfr_init(r20993);
        mpfr_init_set_str(r20994, "3.0820637776628553e-06", 10, MPFR_RNDN);
        mpfr_init(r20995);
        mpfr_init_set_str(r20996, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r20997, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r20998, "4", 10, MPFR_RNDN);
        mpfr_init(r20999);
        mpfr_init(r21000);
        mpfr_init(r21001);
        mpfr_init_set_str(r21002, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r21003, "2", 10, MPFR_RNDN);
        mpfr_init(r21004);
        mpfr_init(r21005);
        mpfr_init(r21006);
        mpfr_init(r21007);
        mpfr_init(r21008);
        mpfr_init(r21009);
        mpfr_init(r21010);
        mpfr_init(r21011);
        mpfr_init(r21012);
        mpfr_init(r21013);
        mpfr_init(r21014);
        mpfr_init(r21015);
}

double f_fm(double x) {
        mpfr_set_d(r20985, x, MPFR_RNDN);
        ;
        mpfr_set_si(r20987, mpfr_cmp(r20985, r20986) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r20989, r20988, r20985, MPFR_RNDN);
        mpfr_cos(r20990, r20985, MPFR_RNDN);
        mpfr_sub(r20991, r20988, r20990, MPFR_RNDN);
        mpfr_div(r20992, r20991, r20985, MPFR_RNDN);
        mpfr_mul(r20993, r20989, r20992, MPFR_RNDN);
        ;
        mpfr_set_si(r20995, mpfr_cmp(r20985, r20994) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r20999, r20985, r20998, MPFR_RNDN);
        mpfr_mul(r21000, r20997, r20999, MPFR_RNDN);
        mpfr_add(r21001, r20996, r21000, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r21004, r20985, r21003, MPFR_RNDN);
        mpfr_mul(r21005, r21002, r21004, MPFR_RNDN);
        mpfr_sub(r21006, r21001, r21005, MPFR_RNDN);
        mpfr_sin(r21007, r20985, MPFR_RNDN);
        mpfr_mul(r21008, r21007, r21007, MPFR_RNDN);
        mpfr_add(r21009, r20988, r20990, MPFR_RNDN);
        mpfr_div(r21010, r21008, r21009, MPFR_RNDN);
        mpfr_sqrt(r21011, r21010, MPFR_RNDN);
        mpfr_div(r21012, r21011, r20985, MPFR_RNDN);
        mpfr_mul(r21013, r21012, r21012, MPFR_RNDN);
        if (mpfr_get_si(r20995, MPFR_RNDN)) { mpfr_set(r21014, r21006, MPFR_RNDN); } else { mpfr_set(r21014, r21013, MPFR_RNDN); };
        if (mpfr_get_si(r20987, MPFR_RNDN)) { mpfr_set(r21015, r20993, MPFR_RNDN); } else { mpfr_set(r21015, r21014, MPFR_RNDN); };
        return mpfr_get_d(r21015, MPFR_RNDN);
}

static mpfr_t r21016, r21017, r21018, r21019, r21020, r21021, r21022, r21023, r21024, r21025, r21026, r21027, r21028, r21029, r21030, r21031, r21032, r21033, r21034, r21035, r21036, r21037, r21038, r21039, r21040, r21041, r21042, r21043, r21044, r21045, r21046;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r21016);
        mpfr_init_set_str(r21017, "-0.03501520358199328", 10, MPFR_RNDN);
        mpfr_init(r21018);
        mpfr_init_set_str(r21019, "1", 10, MPFR_RNDN);
        mpfr_init(r21020);
        mpfr_init(r21021);
        mpfr_init(r21022);
        mpfr_init(r21023);
        mpfr_init(r21024);
        mpfr_init_set_str(r21025, "3.0820637776628553e-06", 10, MPFR_RNDN);
        mpfr_init(r21026);
        mpfr_init_set_str(r21027, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r21028, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r21029, "4", 10, MPFR_RNDN);
        mpfr_init(r21030);
        mpfr_init(r21031);
        mpfr_init(r21032);
        mpfr_init_set_str(r21033, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r21034, "2", 10, MPFR_RNDN);
        mpfr_init(r21035);
        mpfr_init(r21036);
        mpfr_init(r21037);
        mpfr_init(r21038);
        mpfr_init(r21039);
        mpfr_init(r21040);
        mpfr_init(r21041);
        mpfr_init(r21042);
        mpfr_init(r21043);
        mpfr_init(r21044);
        mpfr_init(r21045);
        mpfr_init(r21046);
}

double f_dm(double x) {
        mpfr_set_d(r21016, x, MPFR_RNDN);
        ;
        mpfr_set_si(r21018, mpfr_cmp(r21016, r21017) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r21020, r21019, r21016, MPFR_RNDN);
        mpfr_cos(r21021, r21016, MPFR_RNDN);
        mpfr_sub(r21022, r21019, r21021, MPFR_RNDN);
        mpfr_div(r21023, r21022, r21016, MPFR_RNDN);
        mpfr_mul(r21024, r21020, r21023, MPFR_RNDN);
        ;
        mpfr_set_si(r21026, mpfr_cmp(r21016, r21025) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r21030, r21016, r21029, MPFR_RNDN);
        mpfr_mul(r21031, r21028, r21030, MPFR_RNDN);
        mpfr_add(r21032, r21027, r21031, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r21035, r21016, r21034, MPFR_RNDN);
        mpfr_mul(r21036, r21033, r21035, MPFR_RNDN);
        mpfr_sub(r21037, r21032, r21036, MPFR_RNDN);
        mpfr_sin(r21038, r21016, MPFR_RNDN);
        mpfr_mul(r21039, r21038, r21038, MPFR_RNDN);
        mpfr_add(r21040, r21019, r21021, MPFR_RNDN);
        mpfr_div(r21041, r21039, r21040, MPFR_RNDN);
        mpfr_sqrt(r21042, r21041, MPFR_RNDN);
        mpfr_div(r21043, r21042, r21016, MPFR_RNDN);
        mpfr_mul(r21044, r21043, r21043, MPFR_RNDN);
        if (mpfr_get_si(r21026, MPFR_RNDN)) { mpfr_set(r21045, r21037, MPFR_RNDN); } else { mpfr_set(r21045, r21044, MPFR_RNDN); };
        if (mpfr_get_si(r21018, MPFR_RNDN)) { mpfr_set(r21046, r21024, MPFR_RNDN); } else { mpfr_set(r21046, r21045, MPFR_RNDN); };
        return mpfr_get_d(r21046, MPFR_RNDN);
}

