#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 r8258 = 1;
        float r8259 = x;
        float r8260 = cos(r8259);
        float r8261 = r8258 - r8260;
        float r8262 = r8259 * r8259;
        float r8263 = r8261 / r8262;
        return r8263;
}

double f_id(double x) {
        double r8264 = 1;
        double r8265 = x;
        double r8266 = cos(r8265);
        double r8267 = r8264 - r8266;
        double r8268 = r8265 * r8265;
        double r8269 = r8267 / r8268;
        return r8269;
}


double f_of(float x) {
        float r8270 = x;
        float r8271 = -0.02734102831828874;
        bool r8272 = r8270 <= r8271;
        float r8273 = 1;
        float r8274 = cos(r8270);
        float r8275 = r8273 - r8274;
        float r8276 = cbrt(r8275);
        float r8277 = r8276 * r8276;
        float r8278 = r8277 / r8270;
        float r8279 = r8276 / r8270;
        float r8280 = r8278 * r8279;
        float r8281 = 0.03142103667757586;
        bool r8282 = r8270 <= r8281;
        float r8283 = 1/720;
        float r8284 = 4;
        float r8285 = pow(r8270, r8284);
        float r8286 = 1/2;
        float r8287 = fma(r8283, r8285, r8286);
        float r8288 = r8270 * r8270;
        float r8289 = 1/24;
        float r8290 = r8288 * r8289;
        float r8291 = r8287 - r8290;
        float r8292 = r8273 / r8288;
        float r8293 = r8274 / r8288;
        float r8294 = r8292 - r8293;
        float r8295 = r8282 ? r8291 : r8294;
        float r8296 = r8272 ? r8280 : r8295;
        return r8296;
}

double f_od(double x) {
        double r8297 = x;
        double r8298 = -0.02734102831828874;
        bool r8299 = r8297 <= r8298;
        double r8300 = 1;
        double r8301 = cos(r8297);
        double r8302 = r8300 - r8301;
        double r8303 = cbrt(r8302);
        double r8304 = r8303 * r8303;
        double r8305 = r8304 / r8297;
        double r8306 = r8303 / r8297;
        double r8307 = r8305 * r8306;
        double r8308 = 0.03142103667757586;
        bool r8309 = r8297 <= r8308;
        double r8310 = 1/720;
        double r8311 = 4;
        double r8312 = pow(r8297, r8311);
        double r8313 = 1/2;
        double r8314 = fma(r8310, r8312, r8313);
        double r8315 = r8297 * r8297;
        double r8316 = 1/24;
        double r8317 = r8315 * r8316;
        double r8318 = r8314 - r8317;
        double r8319 = r8300 / r8315;
        double r8320 = r8301 / r8315;
        double r8321 = r8319 - r8320;
        double r8322 = r8309 ? r8318 : r8321;
        double r8323 = r8299 ? r8307 : r8322;
        return r8323;
}

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 r8324, r8325, r8326, r8327, r8328, r8329;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r8324, "1", 10, MPFR_RNDN);
        mpfr_init(r8325);
        mpfr_init(r8326);
        mpfr_init(r8327);
        mpfr_init(r8328);
        mpfr_init(r8329);
}

double f_im(double x) {
        ;
        mpfr_set_d(r8325, x, MPFR_RNDN);
        mpfr_cos(r8326, r8325, MPFR_RNDN);
        mpfr_sub(r8327, r8324, r8326, MPFR_RNDN);
        mpfr_mul(r8328, r8325, r8325, MPFR_RNDN);
        mpfr_div(r8329, r8327, r8328, MPFR_RNDN);
        return mpfr_get_d(r8329, MPFR_RNDN);
}

static mpfr_t r8330, r8331, r8332, r8333, r8334, r8335, r8336, r8337, r8338, r8339, r8340, r8341, r8342, r8343, r8344, r8345, r8346, r8347, r8348, r8349, r8350, r8351, r8352, r8353, r8354, r8355, r8356;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8330);
        mpfr_init_set_str(r8331, "-0.02734102831828874", 10, MPFR_RNDN);
        mpfr_init(r8332);
        mpfr_init_set_str(r8333, "1", 10, MPFR_RNDN);
        mpfr_init(r8334);
        mpfr_init(r8335);
        mpfr_init(r8336);
        mpfr_init(r8337);
        mpfr_init(r8338);
        mpfr_init(r8339);
        mpfr_init(r8340);
        mpfr_init_set_str(r8341, "0.03142103667757586", 10, MPFR_RNDN);
        mpfr_init(r8342);
        mpfr_init_set_str(r8343, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r8344, "4", 10, MPFR_RNDN);
        mpfr_init(r8345);
        mpfr_init_set_str(r8346, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8347);
        mpfr_init(r8348);
        mpfr_init_set_str(r8349, "1/24", 10, MPFR_RNDN);
        mpfr_init(r8350);
        mpfr_init(r8351);
        mpfr_init(r8352);
        mpfr_init(r8353);
        mpfr_init(r8354);
        mpfr_init(r8355);
        mpfr_init(r8356);
}

double f_fm(double x) {
        mpfr_set_d(r8330, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8332, mpfr_cmp(r8330, r8331) <= 0, MPFR_RNDN);
        ;
        mpfr_cos(r8334, r8330, MPFR_RNDN);
        mpfr_sub(r8335, r8333, r8334, MPFR_RNDN);
        mpfr_cbrt(r8336, r8335, MPFR_RNDN);
        mpfr_mul(r8337, r8336, r8336, MPFR_RNDN);
        mpfr_div(r8338, r8337, r8330, MPFR_RNDN);
        mpfr_div(r8339, r8336, r8330, MPFR_RNDN);
        mpfr_mul(r8340, r8338, r8339, MPFR_RNDN);
        ;
        mpfr_set_si(r8342, mpfr_cmp(r8330, r8341) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8345, r8330, r8344, MPFR_RNDN);
        ;
        mpfr_fma(r8347, r8343, r8345, r8346, MPFR_RNDN);
        mpfr_mul(r8348, r8330, r8330, MPFR_RNDN);
        ;
        mpfr_mul(r8350, r8348, r8349, MPFR_RNDN);
        mpfr_sub(r8351, r8347, r8350, MPFR_RNDN);
        mpfr_div(r8352, r8333, r8348, MPFR_RNDN);
        mpfr_div(r8353, r8334, r8348, MPFR_RNDN);
        mpfr_sub(r8354, r8352, r8353, MPFR_RNDN);
        if (mpfr_get_si(r8342, MPFR_RNDN)) { mpfr_set(r8355, r8351, MPFR_RNDN); } else { mpfr_set(r8355, r8354, MPFR_RNDN); };
        if (mpfr_get_si(r8332, MPFR_RNDN)) { mpfr_set(r8356, r8340, MPFR_RNDN); } else { mpfr_set(r8356, r8355, MPFR_RNDN); };
        return mpfr_get_d(r8356, MPFR_RNDN);
}

static mpfr_t r8357, r8358, r8359, r8360, r8361, r8362, r8363, r8364, r8365, r8366, r8367, r8368, r8369, r8370, r8371, r8372, r8373, r8374, r8375, r8376, r8377, r8378, r8379, r8380, r8381, r8382, r8383;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8357);
        mpfr_init_set_str(r8358, "-0.02734102831828874", 10, MPFR_RNDN);
        mpfr_init(r8359);
        mpfr_init_set_str(r8360, "1", 10, MPFR_RNDN);
        mpfr_init(r8361);
        mpfr_init(r8362);
        mpfr_init(r8363);
        mpfr_init(r8364);
        mpfr_init(r8365);
        mpfr_init(r8366);
        mpfr_init(r8367);
        mpfr_init_set_str(r8368, "0.03142103667757586", 10, MPFR_RNDN);
        mpfr_init(r8369);
        mpfr_init_set_str(r8370, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r8371, "4", 10, MPFR_RNDN);
        mpfr_init(r8372);
        mpfr_init_set_str(r8373, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8374);
        mpfr_init(r8375);
        mpfr_init_set_str(r8376, "1/24", 10, MPFR_RNDN);
        mpfr_init(r8377);
        mpfr_init(r8378);
        mpfr_init(r8379);
        mpfr_init(r8380);
        mpfr_init(r8381);
        mpfr_init(r8382);
        mpfr_init(r8383);
}

double f_dm(double x) {
        mpfr_set_d(r8357, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8359, mpfr_cmp(r8357, r8358) <= 0, MPFR_RNDN);
        ;
        mpfr_cos(r8361, r8357, MPFR_RNDN);
        mpfr_sub(r8362, r8360, r8361, MPFR_RNDN);
        mpfr_cbrt(r8363, r8362, MPFR_RNDN);
        mpfr_mul(r8364, r8363, r8363, MPFR_RNDN);
        mpfr_div(r8365, r8364, r8357, MPFR_RNDN);
        mpfr_div(r8366, r8363, r8357, MPFR_RNDN);
        mpfr_mul(r8367, r8365, r8366, MPFR_RNDN);
        ;
        mpfr_set_si(r8369, mpfr_cmp(r8357, r8368) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8372, r8357, r8371, MPFR_RNDN);
        ;
        mpfr_fma(r8374, r8370, r8372, r8373, MPFR_RNDN);
        mpfr_mul(r8375, r8357, r8357, MPFR_RNDN);
        ;
        mpfr_mul(r8377, r8375, r8376, MPFR_RNDN);
        mpfr_sub(r8378, r8374, r8377, MPFR_RNDN);
        mpfr_div(r8379, r8360, r8375, MPFR_RNDN);
        mpfr_div(r8380, r8361, r8375, MPFR_RNDN);
        mpfr_sub(r8381, r8379, r8380, MPFR_RNDN);
        if (mpfr_get_si(r8369, MPFR_RNDN)) { mpfr_set(r8382, r8378, MPFR_RNDN); } else { mpfr_set(r8382, r8381, MPFR_RNDN); };
        if (mpfr_get_si(r8359, MPFR_RNDN)) { mpfr_set(r8383, r8367, MPFR_RNDN); } else { mpfr_set(r8383, r8382, MPFR_RNDN); };
        return mpfr_get_d(r8383, MPFR_RNDN);
}

