#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 r7879 = 1.0f;
        float r7880 = x;
        float r7881 = cos(r7880);
        float r7882 = r7879 - r7881;
        float r7883 = r7880 * r7880;
        float r7884 = r7882 / r7883;
        return r7884;
}

double f_id(double x) {
        double r7885 = 1.0;
        double r7886 = x;
        double r7887 = cos(r7886);
        double r7888 = r7885 - r7887;
        double r7889 = r7886 * r7886;
        double r7890 = r7888 / r7889;
        return r7890;
}


double f_of(float x) {
        float r7891 = x;
        float r7892 = -0.028431976646957072f;
        bool r7893 = r7891 <= r7892;
        float r7894 = 1.0f;
        float r7895 = cos(r7891);
        float r7896 = r7894 - r7895;
        float r7897 = sqrt(r7896);
        float r7898 = r7897 / r7891;
        float r7899 = r7898 * r7898;
        float r7900 = 0.032105177177255154f;
        bool r7901 = r7891 <= r7900;
        float r7902 = 0.001388888888888889f;
        float r7903 = 4.0f;
        float r7904 = pow(r7891, r7903);
        float r7905 = r7902 * r7904;
        float r7906 = 0.5f;
        float r7907 = r7905 + r7906;
        float r7908 = 0.041666666666666664f;
        float r7909 = 2.0f;
        float r7910 = pow(r7891, r7909);
        float r7911 = r7908 * r7910;
        float r7912 = r7907 - r7911;
        float r7913 = r7891 * r7891;
        float r7914 = r7896 / r7913;
        float r7915 = r7901 ? r7912 : r7914;
        float r7916 = r7893 ? r7899 : r7915;
        return r7916;
}

double f_od(double x) {
        double r7917 = x;
        double r7918 = -0.028431976646957072;
        bool r7919 = r7917 <= r7918;
        double r7920 = 1.0;
        double r7921 = cos(r7917);
        double r7922 = r7920 - r7921;
        double r7923 = sqrt(r7922);
        double r7924 = r7923 / r7917;
        double r7925 = r7924 * r7924;
        double r7926 = 0.032105177177255154;
        bool r7927 = r7917 <= r7926;
        double r7928 = 0.001388888888888889;
        double r7929 = 4.0;
        double r7930 = pow(r7917, r7929);
        double r7931 = r7928 * r7930;
        double r7932 = 0.5;
        double r7933 = r7931 + r7932;
        double r7934 = 0.041666666666666664;
        double r7935 = 2.0;
        double r7936 = pow(r7917, r7935);
        double r7937 = r7934 * r7936;
        double r7938 = r7933 - r7937;
        double r7939 = r7917 * r7917;
        double r7940 = r7922 / r7939;
        double r7941 = r7927 ? r7938 : r7940;
        double r7942 = r7919 ? r7925 : r7941;
        return r7942;
}

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 r7943, r7944, r7945, r7946, r7947, r7948;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r7943, "1", 10, MPFR_RNDN);
        mpfr_init(r7944);
        mpfr_init(r7945);
        mpfr_init(r7946);
        mpfr_init(r7947);
        mpfr_init(r7948);
}

double f_im(double x) {
        ;
        mpfr_set_d(r7944, x, MPFR_RNDN);
        mpfr_cos(r7945, r7944, MPFR_RNDN);
        mpfr_sub(r7946, r7943, r7945, MPFR_RNDN);
        mpfr_mul(r7947, r7944, r7944, MPFR_RNDN);
        mpfr_div(r7948, r7946, r7947, MPFR_RNDN);
        return mpfr_get_d(r7948, MPFR_RNDN);
}

static mpfr_t r7949, r7950, r7951, r7952, r7953, r7954, r7955, r7956, r7957, r7958, r7959, r7960, r7961, r7962, r7963, r7964, r7965, r7966, r7967, r7968, r7969, r7970, r7971, r7972, r7973, r7974;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r7949);
        mpfr_init_set_str(r7950, "-0.028431976646957072", 10, MPFR_RNDN);
        mpfr_init(r7951);
        mpfr_init_set_str(r7952, "1", 10, MPFR_RNDN);
        mpfr_init(r7953);
        mpfr_init(r7954);
        mpfr_init(r7955);
        mpfr_init(r7956);
        mpfr_init(r7957);
        mpfr_init_set_str(r7958, "0.032105177177255154", 10, MPFR_RNDN);
        mpfr_init(r7959);
        mpfr_init_set_str(r7960, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r7961, "4", 10, MPFR_RNDN);
        mpfr_init(r7962);
        mpfr_init(r7963);
        mpfr_init_set_str(r7964, "1/2", 10, MPFR_RNDN);
        mpfr_init(r7965);
        mpfr_init_set_str(r7966, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r7967, "2", 10, MPFR_RNDN);
        mpfr_init(r7968);
        mpfr_init(r7969);
        mpfr_init(r7970);
        mpfr_init(r7971);
        mpfr_init(r7972);
        mpfr_init(r7973);
        mpfr_init(r7974);
}

double f_fm(double x) {
        mpfr_set_d(r7949, x, MPFR_RNDN);
        ;
        mpfr_set_si(r7951, mpfr_cmp(r7949, r7950) <= 0, MPFR_RNDN);
        ;
        mpfr_cos(r7953, r7949, MPFR_RNDN);
        mpfr_sub(r7954, r7952, r7953, MPFR_RNDN);
        mpfr_sqrt(r7955, r7954, MPFR_RNDN);
        mpfr_div(r7956, r7955, r7949, MPFR_RNDN);
        mpfr_mul(r7957, r7956, r7956, MPFR_RNDN);
        ;
        mpfr_set_si(r7959, mpfr_cmp(r7949, r7958) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r7962, r7949, r7961, MPFR_RNDN);
        mpfr_mul(r7963, r7960, r7962, MPFR_RNDN);
        ;
        mpfr_add(r7965, r7963, r7964, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r7968, r7949, r7967, MPFR_RNDN);
        mpfr_mul(r7969, r7966, r7968, MPFR_RNDN);
        mpfr_sub(r7970, r7965, r7969, MPFR_RNDN);
        mpfr_mul(r7971, r7949, r7949, MPFR_RNDN);
        mpfr_div(r7972, r7954, r7971, MPFR_RNDN);
        if (mpfr_get_si(r7959, MPFR_RNDN)) { mpfr_set(r7973, r7970, MPFR_RNDN); } else { mpfr_set(r7973, r7972, MPFR_RNDN); };
        if (mpfr_get_si(r7951, MPFR_RNDN)) { mpfr_set(r7974, r7957, MPFR_RNDN); } else { mpfr_set(r7974, r7973, MPFR_RNDN); };
        return mpfr_get_d(r7974, MPFR_RNDN);
}

static mpfr_t r7975, r7976, r7977, r7978, r7979, r7980, r7981, r7982, r7983, r7984, r7985, r7986, r7987, r7988, r7989, r7990, r7991, r7992, r7993, r7994, r7995, r7996, r7997, r7998, r7999, r8000;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r7975);
        mpfr_init_set_str(r7976, "-0.028431976646957072", 10, MPFR_RNDN);
        mpfr_init(r7977);
        mpfr_init_set_str(r7978, "1", 10, MPFR_RNDN);
        mpfr_init(r7979);
        mpfr_init(r7980);
        mpfr_init(r7981);
        mpfr_init(r7982);
        mpfr_init(r7983);
        mpfr_init_set_str(r7984, "0.032105177177255154", 10, MPFR_RNDN);
        mpfr_init(r7985);
        mpfr_init_set_str(r7986, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r7987, "4", 10, MPFR_RNDN);
        mpfr_init(r7988);
        mpfr_init(r7989);
        mpfr_init_set_str(r7990, "1/2", 10, MPFR_RNDN);
        mpfr_init(r7991);
        mpfr_init_set_str(r7992, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r7993, "2", 10, MPFR_RNDN);
        mpfr_init(r7994);
        mpfr_init(r7995);
        mpfr_init(r7996);
        mpfr_init(r7997);
        mpfr_init(r7998);
        mpfr_init(r7999);
        mpfr_init(r8000);
}

double f_dm(double x) {
        mpfr_set_d(r7975, x, MPFR_RNDN);
        ;
        mpfr_set_si(r7977, mpfr_cmp(r7975, r7976) <= 0, MPFR_RNDN);
        ;
        mpfr_cos(r7979, r7975, MPFR_RNDN);
        mpfr_sub(r7980, r7978, r7979, MPFR_RNDN);
        mpfr_sqrt(r7981, r7980, MPFR_RNDN);
        mpfr_div(r7982, r7981, r7975, MPFR_RNDN);
        mpfr_mul(r7983, r7982, r7982, MPFR_RNDN);
        ;
        mpfr_set_si(r7985, mpfr_cmp(r7975, r7984) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r7988, r7975, r7987, MPFR_RNDN);
        mpfr_mul(r7989, r7986, r7988, MPFR_RNDN);
        ;
        mpfr_add(r7991, r7989, r7990, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r7994, r7975, r7993, MPFR_RNDN);
        mpfr_mul(r7995, r7992, r7994, MPFR_RNDN);
        mpfr_sub(r7996, r7991, r7995, MPFR_RNDN);
        mpfr_mul(r7997, r7975, r7975, MPFR_RNDN);
        mpfr_div(r7998, r7980, r7997, MPFR_RNDN);
        if (mpfr_get_si(r7985, MPFR_RNDN)) { mpfr_set(r7999, r7996, MPFR_RNDN); } else { mpfr_set(r7999, r7998, MPFR_RNDN); };
        if (mpfr_get_si(r7977, MPFR_RNDN)) { mpfr_set(r8000, r7983, MPFR_RNDN); } else { mpfr_set(r8000, r7999, MPFR_RNDN); };
        return mpfr_get_d(r8000, MPFR_RNDN);
}

