#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 r18958 = 1.0f;
        float r18959 = x;
        float r18960 = cos(r18959);
        float r18961 = r18958 - r18960;
        float r18962 = r18959 * r18959;
        float r18963 = r18961 / r18962;
        return r18963;
}

double f_id(double x) {
        double r18964 = 1.0;
        double r18965 = x;
        double r18966 = cos(r18965);
        double r18967 = r18964 - r18966;
        double r18968 = r18965 * r18965;
        double r18969 = r18967 / r18968;
        return r18969;
}


double f_of(float x) {
        float r18970 = x;
        float r18971 = -1.2745508074835617e-14f;
        bool r18972 = r18970 <= r18971;
        float r18973 = sin(r18970);
        float r18974 = r18973 * r18973;
        float r18975 = r18974 / r18970;
        float r18976 = 1.0f;
        float r18977 = cos(r18970);
        float r18978 = 3.0f;
        float r18979 = pow(r18977, r18978);
        float r18980 = r18976 + r18979;
        float r18981 = r18975 / r18980;
        float r18982 = r18976 - r18977;
        float r18983 = r18977 * r18977;
        float r18984 = r18982 + r18983;
        float r18985 = r18984 / r18970;
        float r18986 = r18981 * r18985;
        float r18987 = 1850694803779224.5f;
        bool r18988 = r18970 <= r18987;
        float r18989 = 0.5f;
        float r18990 = 0.001388888888888889f;
        float r18991 = 4.0f;
        float r18992 = pow(r18970, r18991);
        float r18993 = r18990 * r18992;
        float r18994 = r18989 + r18993;
        float r18995 = 0.041666666666666664f;
        float r18996 = 2.0f;
        float r18997 = pow(r18970, r18996);
        float r18998 = r18995 * r18997;
        float r18999 = r18994 - r18998;
        float r19000 = r18988 ? r18999 : r18986;
        float r19001 = r18972 ? r18986 : r19000;
        return r19001;
}

double f_od(double x) {
        double r19002 = x;
        double r19003 = -1.2745508074835617e-14;
        bool r19004 = r19002 <= r19003;
        double r19005 = sin(r19002);
        double r19006 = r19005 * r19005;
        double r19007 = r19006 / r19002;
        double r19008 = 1.0;
        double r19009 = cos(r19002);
        double r19010 = 3.0;
        double r19011 = pow(r19009, r19010);
        double r19012 = r19008 + r19011;
        double r19013 = r19007 / r19012;
        double r19014 = r19008 - r19009;
        double r19015 = r19009 * r19009;
        double r19016 = r19014 + r19015;
        double r19017 = r19016 / r19002;
        double r19018 = r19013 * r19017;
        double r19019 = 1850694803779224.5;
        bool r19020 = r19002 <= r19019;
        double r19021 = 0.5;
        double r19022 = 0.001388888888888889;
        double r19023 = 4.0;
        double r19024 = pow(r19002, r19023);
        double r19025 = r19022 * r19024;
        double r19026 = r19021 + r19025;
        double r19027 = 0.041666666666666664;
        double r19028 = 2.0;
        double r19029 = pow(r19002, r19028);
        double r19030 = r19027 * r19029;
        double r19031 = r19026 - r19030;
        double r19032 = r19020 ? r19031 : r19018;
        double r19033 = r19004 ? r19018 : r19032;
        return r19033;
}

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 r19034, r19035, r19036, r19037, r19038, r19039;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r19034, "1", 10, MPFR_RNDN);
        mpfr_init(r19035);
        mpfr_init(r19036);
        mpfr_init(r19037);
        mpfr_init(r19038);
        mpfr_init(r19039);
}

double f_im(double x) {
        ;
        mpfr_set_d(r19035, x, MPFR_RNDN);
        mpfr_cos(r19036, r19035, MPFR_RNDN);
        mpfr_sub(r19037, r19034, r19036, MPFR_RNDN);
        mpfr_sqr(r19038, r19035, MPFR_RNDN);
        mpfr_div(r19039, r19037, r19038, MPFR_RNDN);
        return mpfr_get_d(r19039, MPFR_RNDN);
}

static mpfr_t r19040, r19041, r19042, r19043, r19044, r19045, r19046, r19047, r19048, r19049, r19050, r19051, r19052, r19053, r19054, r19055, r19056, r19057, r19058, r19059, r19060, r19061, r19062, r19063, r19064, r19065, r19066, r19067, r19068, r19069, r19070, r19071;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19040);
        mpfr_init_set_str(r19041, "-1.2745508074835617e-14", 10, MPFR_RNDN);
        mpfr_init(r19042);
        mpfr_init(r19043);
        mpfr_init(r19044);
        mpfr_init(r19045);
        mpfr_init_set_str(r19046, "1", 10, MPFR_RNDN);
        mpfr_init(r19047);
        mpfr_init_set_str(r19048, "3", 10, MPFR_RNDN);
        mpfr_init(r19049);
        mpfr_init(r19050);
        mpfr_init(r19051);
        mpfr_init(r19052);
        mpfr_init(r19053);
        mpfr_init(r19054);
        mpfr_init(r19055);
        mpfr_init(r19056);
        mpfr_init_set_str(r19057, "1850694803779224.5", 10, MPFR_RNDN);
        mpfr_init(r19058);
        mpfr_init_set_str(r19059, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r19060, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r19061, "4", 10, MPFR_RNDN);
        mpfr_init(r19062);
        mpfr_init(r19063);
        mpfr_init(r19064);
        mpfr_init_set_str(r19065, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r19066, "2", 10, MPFR_RNDN);
        mpfr_init(r19067);
        mpfr_init(r19068);
        mpfr_init(r19069);
        mpfr_init(r19070);
        mpfr_init(r19071);
}

double f_fm(double x) {
        mpfr_set_d(r19040, x, MPFR_RNDN);
        ;
        mpfr_set_si(r19042, mpfr_cmp(r19040, r19041) <= 0, MPFR_RNDN);
        mpfr_sin(r19043, r19040, MPFR_RNDN);
        mpfr_mul(r19044, r19043, r19043, MPFR_RNDN);
        mpfr_div(r19045, r19044, r19040, MPFR_RNDN);
        ;
        mpfr_cos(r19047, r19040, MPFR_RNDN);
        ;
        mpfr_pow(r19049, r19047, r19048, MPFR_RNDN);
        mpfr_add(r19050, r19046, r19049, MPFR_RNDN);
        mpfr_div(r19051, r19045, r19050, MPFR_RNDN);
        mpfr_sub(r19052, r19046, r19047, MPFR_RNDN);
        mpfr_mul(r19053, r19047, r19047, MPFR_RNDN);
        mpfr_add(r19054, r19052, r19053, MPFR_RNDN);
        mpfr_div(r19055, r19054, r19040, MPFR_RNDN);
        mpfr_mul(r19056, r19051, r19055, MPFR_RNDN);
        ;
        mpfr_set_si(r19058, mpfr_cmp(r19040, r19057) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r19062, r19040, r19061, MPFR_RNDN);
        mpfr_mul(r19063, r19060, r19062, MPFR_RNDN);
        mpfr_add(r19064, r19059, r19063, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r19067, r19040, r19066, MPFR_RNDN);
        mpfr_mul(r19068, r19065, r19067, MPFR_RNDN);
        mpfr_sub(r19069, r19064, r19068, MPFR_RNDN);
        if (mpfr_get_si(r19058, MPFR_RNDN)) { mpfr_set(r19070, r19069, MPFR_RNDN); } else { mpfr_set(r19070, r19056, MPFR_RNDN); };
        if (mpfr_get_si(r19042, MPFR_RNDN)) { mpfr_set(r19071, r19056, MPFR_RNDN); } else { mpfr_set(r19071, r19070, MPFR_RNDN); };
        return mpfr_get_d(r19071, MPFR_RNDN);
}

static mpfr_t r19072, r19073, r19074, r19075, r19076, r19077, r19078, r19079, r19080, r19081, r19082, r19083, r19084, r19085, r19086, r19087, r19088, r19089, r19090, r19091, r19092, r19093, r19094, r19095, r19096, r19097, r19098, r19099, r19100, r19101, r19102, r19103;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19072);
        mpfr_init_set_str(r19073, "-1.2745508074835617e-14", 10, MPFR_RNDN);
        mpfr_init(r19074);
        mpfr_init(r19075);
        mpfr_init(r19076);
        mpfr_init(r19077);
        mpfr_init_set_str(r19078, "1", 10, MPFR_RNDN);
        mpfr_init(r19079);
        mpfr_init_set_str(r19080, "3", 10, MPFR_RNDN);
        mpfr_init(r19081);
        mpfr_init(r19082);
        mpfr_init(r19083);
        mpfr_init(r19084);
        mpfr_init(r19085);
        mpfr_init(r19086);
        mpfr_init(r19087);
        mpfr_init(r19088);
        mpfr_init_set_str(r19089, "1850694803779224.5", 10, MPFR_RNDN);
        mpfr_init(r19090);
        mpfr_init_set_str(r19091, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r19092, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r19093, "4", 10, MPFR_RNDN);
        mpfr_init(r19094);
        mpfr_init(r19095);
        mpfr_init(r19096);
        mpfr_init_set_str(r19097, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r19098, "2", 10, MPFR_RNDN);
        mpfr_init(r19099);
        mpfr_init(r19100);
        mpfr_init(r19101);
        mpfr_init(r19102);
        mpfr_init(r19103);
}

double f_dm(double x) {
        mpfr_set_d(r19072, x, MPFR_RNDN);
        ;
        mpfr_set_si(r19074, mpfr_cmp(r19072, r19073) <= 0, MPFR_RNDN);
        mpfr_sin(r19075, r19072, MPFR_RNDN);
        mpfr_mul(r19076, r19075, r19075, MPFR_RNDN);
        mpfr_div(r19077, r19076, r19072, MPFR_RNDN);
        ;
        mpfr_cos(r19079, r19072, MPFR_RNDN);
        ;
        mpfr_pow(r19081, r19079, r19080, MPFR_RNDN);
        mpfr_add(r19082, r19078, r19081, MPFR_RNDN);
        mpfr_div(r19083, r19077, r19082, MPFR_RNDN);
        mpfr_sub(r19084, r19078, r19079, MPFR_RNDN);
        mpfr_mul(r19085, r19079, r19079, MPFR_RNDN);
        mpfr_add(r19086, r19084, r19085, MPFR_RNDN);
        mpfr_div(r19087, r19086, r19072, MPFR_RNDN);
        mpfr_mul(r19088, r19083, r19087, MPFR_RNDN);
        ;
        mpfr_set_si(r19090, mpfr_cmp(r19072, r19089) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r19094, r19072, r19093, MPFR_RNDN);
        mpfr_mul(r19095, r19092, r19094, MPFR_RNDN);
        mpfr_add(r19096, r19091, r19095, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r19099, r19072, r19098, MPFR_RNDN);
        mpfr_mul(r19100, r19097, r19099, MPFR_RNDN);
        mpfr_sub(r19101, r19096, r19100, MPFR_RNDN);
        if (mpfr_get_si(r19090, MPFR_RNDN)) { mpfr_set(r19102, r19101, MPFR_RNDN); } else { mpfr_set(r19102, r19088, MPFR_RNDN); };
        if (mpfr_get_si(r19074, MPFR_RNDN)) { mpfr_set(r19103, r19088, MPFR_RNDN); } else { mpfr_set(r19103, r19102, MPFR_RNDN); };
        return mpfr_get_d(r19103, MPFR_RNDN);
}

