#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 = 0.5f;
        float r7906 = fma(r7902, r7904, r7905);
        float r7907 = r7891 * r7891;
        float r7908 = 0.041666666666666664f;
        float r7909 = r7907 * r7908;
        float r7910 = r7906 - r7909;
        float r7911 = r7896 / r7907;
        float r7912 = r7901 ? r7910 : r7911;
        float r7913 = r7893 ? r7899 : r7912;
        return r7913;
}

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

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 r7937, r7938, r7939, r7940, r7941, r7942;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r7937, "1", 10, MPFR_RNDN);
        mpfr_init(r7938);
        mpfr_init(r7939);
        mpfr_init(r7940);
        mpfr_init(r7941);
        mpfr_init(r7942);
}

double f_im(double x) {
        ;
        mpfr_set_d(r7938, x, MPFR_RNDN);
        mpfr_cos(r7939, r7938, MPFR_RNDN);
        mpfr_sub(r7940, r7937, r7939, MPFR_RNDN);
        mpfr_mul(r7941, r7938, r7938, MPFR_RNDN);
        mpfr_div(r7942, r7940, r7941, MPFR_RNDN);
        return mpfr_get_d(r7942, MPFR_RNDN);
}

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

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

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

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

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

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

