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

double f_id(double x) {
        double r7888 = 1.0;
        double r7889 = x;
        double r7890 = cos(r7889);
        double r7891 = r7888 - r7890;
        double r7892 = r7889 * r7889;
        double r7893 = r7891 / r7892;
        return r7893;
}


double f_of(float x) {
        float r7894 = x;
        float r7895 = -0.028431976646957072f;
        bool r7896 = r7894 <= r7895;
        float r7897 = 1.0f;
        float r7898 = cos(r7894);
        float r7899 = r7897 - r7898;
        float r7900 = sqrt(r7899);
        float r7901 = r7900 / r7894;
        float r7902 = r7901 * r7901;
        float r7903 = 0.032105177177255154f;
        bool r7904 = r7894 <= r7903;
        float r7905 = 0.001388888888888889f;
        float r7906 = 4.0f;
        float r7907 = pow(r7894, r7906);
        float r7908 = 0.5f;
        float r7909 = fma(r7905, r7907, r7908);
        float r7910 = r7894 * r7894;
        float r7911 = 0.041666666666666664f;
        float r7912 = r7910 * r7911;
        float r7913 = r7909 - r7912;
        float r7914 = r7899 / r7910;
        float r7915 = r7904 ? r7913 : r7914;
        float r7916 = r7896 ? r7902 : 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 = 0.5;
        double r7932 = fma(r7928, r7930, r7931);
        double r7933 = r7917 * r7917;
        double r7934 = 0.041666666666666664;
        double r7935 = r7933 * r7934;
        double r7936 = r7932 - r7935;
        double r7937 = r7922 / r7933;
        double r7938 = r7927 ? r7936 : r7937;
        double r7939 = r7919 ? r7925 : r7938;
        return r7939;
}

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 r7940, r7941, r7942, r7943, r7944, r7945;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r7940, "1", 10, MPFR_RNDN);
        mpfr_init(r7941);
        mpfr_init(r7942);
        mpfr_init(r7943);
        mpfr_init(r7944);
        mpfr_init(r7945);
}

double f_im(double x) {
        ;
        mpfr_set_d(r7941, x, MPFR_RNDN);
        mpfr_cos(r7942, r7941, MPFR_RNDN);
        mpfr_sub(r7943, r7940, r7942, MPFR_RNDN);
        mpfr_mul(r7944, r7941, r7941, MPFR_RNDN);
        mpfr_div(r7945, r7943, r7944, MPFR_RNDN);
        return mpfr_get_d(r7945, MPFR_RNDN);
}

static mpfr_t r7946, r7947, r7948, r7949, r7950, r7951, r7952, r7953, r7954, r7955, r7956, r7957, r7958, r7959, r7960, r7961, r7962, r7963, r7964, r7965, r7966, r7967, r7968;

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

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

static mpfr_t r7969, r7970, r7971, r7972, r7973, r7974, r7975, r7976, r7977, r7978, r7979, r7980, r7981, r7982, r7983, r7984, r7985, r7986, r7987, r7988, r7989, r7990, r7991;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r7969);
        mpfr_init_set_str(r7970, "-0.028431976646957072", 10, MPFR_RNDN);
        mpfr_init(r7971);
        mpfr_init_set_str(r7972, "1", 10, MPFR_RNDN);
        mpfr_init(r7973);
        mpfr_init(r7974);
        mpfr_init(r7975);
        mpfr_init(r7976);
        mpfr_init(r7977);
        mpfr_init_set_str(r7978, "0.032105177177255154", 10, MPFR_RNDN);
        mpfr_init(r7979);
        mpfr_init_set_str(r7980, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r7981, "4", 10, MPFR_RNDN);
        mpfr_init(r7982);
        mpfr_init_set_str(r7983, "1/2", 10, MPFR_RNDN);
        mpfr_init(r7984);
        mpfr_init(r7985);
        mpfr_init_set_str(r7986, "1/24", 10, MPFR_RNDN);
        mpfr_init(r7987);
        mpfr_init(r7988);
        mpfr_init(r7989);
        mpfr_init(r7990);
        mpfr_init(r7991);
}

double f_dm(double x) {
        mpfr_set_d(r7969, x, MPFR_RNDN);
        ;
        mpfr_set_si(r7971, mpfr_cmp(r7969, r7970) <= 0, MPFR_RNDN);
        ;
        mpfr_cos(r7973, r7969, MPFR_RNDN);
        mpfr_sub(r7974, r7972, r7973, MPFR_RNDN);
        mpfr_sqrt(r7975, r7974, MPFR_RNDN);
        mpfr_div(r7976, r7975, r7969, MPFR_RNDN);
        mpfr_mul(r7977, r7976, r7976, MPFR_RNDN);
        ;
        mpfr_set_si(r7979, mpfr_cmp(r7969, r7978) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r7982, r7969, r7981, MPFR_RNDN);
        ;
        mpfr_fma(r7984, r7980, r7982, r7983, MPFR_RNDN);
        mpfr_mul(r7985, r7969, r7969, MPFR_RNDN);
        ;
        mpfr_mul(r7987, r7985, r7986, MPFR_RNDN);
        mpfr_sub(r7988, r7984, r7987, MPFR_RNDN);
        mpfr_div(r7989, r7974, r7985, MPFR_RNDN);
        if (mpfr_get_si(r7979, MPFR_RNDN)) { mpfr_set(r7990, r7988, MPFR_RNDN); } else { mpfr_set(r7990, r7989, MPFR_RNDN); };
        if (mpfr_get_si(r7971, MPFR_RNDN)) { mpfr_set(r7991, r7977, MPFR_RNDN); } else { mpfr_set(r7991, r7990, MPFR_RNDN); };
        return mpfr_get_d(r7991, MPFR_RNDN);
}

