#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 r6214388 = 1;
        float r6214389 = x;
        float r6214390 = cos(r6214389);
        float r6214391 = r6214388 - r6214390;
        float r6214392 = r6214389 * r6214389;
        float r6214393 = r6214391 / r6214392;
        return r6214393;
}

double f_id(double x) {
        double r6214394 = 1;
        double r6214395 = x;
        double r6214396 = cos(r6214395);
        double r6214397 = r6214394 - r6214396;
        double r6214398 = r6214395 * r6214395;
        double r6214399 = r6214397 / r6214398;
        return r6214399;
}


double f_of(float x) {
        float r6214400 = x;
        float r6214401 = -0.013032351641669214;
        bool r6214402 = r6214400 <= r6214401;
        float r6214403 = sin(r6214400);
        float r6214404 = r6214403 / r6214400;
        float r6214405 = 1;
        float r6214406 = cos(r6214400);
        float r6214407 = r6214405 + r6214406;
        float r6214408 = r6214407 / r6214404;
        float r6214409 = r6214404 / r6214408;
        float r6214410 = 0.00982517273317034;
        bool r6214411 = r6214400 <= r6214410;
        float r6214412 = 1/2;
        float r6214413 = 1/720;
        float r6214414 = 4;
        float r6214415 = pow(r6214400, r6214414);
        float r6214416 = r6214413 * r6214415;
        float r6214417 = r6214400 * r6214400;
        float r6214418 = 1/24;
        float r6214419 = r6214417 * r6214418;
        float r6214420 = r6214416 - r6214419;
        float r6214421 = r6214412 + r6214420;
        float r6214422 = r6214411 ? r6214421 : r6214409;
        float r6214423 = r6214402 ? r6214409 : r6214422;
        return r6214423;
}

double f_od(double x) {
        double r6214424 = x;
        double r6214425 = -0.013032351641669214;
        bool r6214426 = r6214424 <= r6214425;
        double r6214427 = sin(r6214424);
        double r6214428 = r6214427 / r6214424;
        double r6214429 = 1;
        double r6214430 = cos(r6214424);
        double r6214431 = r6214429 + r6214430;
        double r6214432 = r6214431 / r6214428;
        double r6214433 = r6214428 / r6214432;
        double r6214434 = 0.00982517273317034;
        bool r6214435 = r6214424 <= r6214434;
        double r6214436 = 1/2;
        double r6214437 = 1/720;
        double r6214438 = 4;
        double r6214439 = pow(r6214424, r6214438);
        double r6214440 = r6214437 * r6214439;
        double r6214441 = r6214424 * r6214424;
        double r6214442 = 1/24;
        double r6214443 = r6214441 * r6214442;
        double r6214444 = r6214440 - r6214443;
        double r6214445 = r6214436 + r6214444;
        double r6214446 = r6214435 ? r6214445 : r6214433;
        double r6214447 = r6214426 ? r6214433 : r6214446;
        return r6214447;
}

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 r6214448, r6214449, r6214450, r6214451, r6214452, r6214453;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r6214448, "1", 10, MPFR_RNDN);
        mpfr_init(r6214449);
        mpfr_init(r6214450);
        mpfr_init(r6214451);
        mpfr_init(r6214452);
        mpfr_init(r6214453);
}

double f_im(double x) {
        ;
        mpfr_set_d(r6214449, x, MPFR_RNDN);
        mpfr_cos(r6214450, r6214449, MPFR_RNDN);
        mpfr_sub(r6214451, r6214448, r6214450, MPFR_RNDN);
        mpfr_mul(r6214452, r6214449, r6214449, MPFR_RNDN);
        mpfr_div(r6214453, r6214451, r6214452, MPFR_RNDN);
        return mpfr_get_d(r6214453, MPFR_RNDN);
}

static mpfr_t r6214454, r6214455, r6214456, r6214457, r6214458, r6214459, r6214460, r6214461, r6214462, r6214463, r6214464, r6214465, r6214466, r6214467, r6214468, r6214469, r6214470, r6214471, r6214472, r6214473, r6214474, r6214475, r6214476, r6214477;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r6214454);
        mpfr_init_set_str(r6214455, "-0.013032351641669214", 10, MPFR_RNDN);
        mpfr_init(r6214456);
        mpfr_init(r6214457);
        mpfr_init(r6214458);
        mpfr_init_set_str(r6214459, "1", 10, MPFR_RNDN);
        mpfr_init(r6214460);
        mpfr_init(r6214461);
        mpfr_init(r6214462);
        mpfr_init(r6214463);
        mpfr_init_set_str(r6214464, "0.00982517273317034", 10, MPFR_RNDN);
        mpfr_init(r6214465);
        mpfr_init_set_str(r6214466, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r6214467, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r6214468, "4", 10, MPFR_RNDN);
        mpfr_init(r6214469);
        mpfr_init(r6214470);
        mpfr_init(r6214471);
        mpfr_init_set_str(r6214472, "1/24", 10, MPFR_RNDN);
        mpfr_init(r6214473);
        mpfr_init(r6214474);
        mpfr_init(r6214475);
        mpfr_init(r6214476);
        mpfr_init(r6214477);
}

double f_fm(double x) {
        mpfr_set_d(r6214454, x, MPFR_RNDN);
        ;
        mpfr_set_si(r6214456, mpfr_cmp(r6214454, r6214455) <= 0, MPFR_RNDN);
        mpfr_sin(r6214457, r6214454, MPFR_RNDN);
        mpfr_div(r6214458, r6214457, r6214454, MPFR_RNDN);
        ;
        mpfr_cos(r6214460, r6214454, MPFR_RNDN);
        mpfr_add(r6214461, r6214459, r6214460, MPFR_RNDN);
        mpfr_div(r6214462, r6214461, r6214458, MPFR_RNDN);
        mpfr_div(r6214463, r6214458, r6214462, MPFR_RNDN);
        ;
        mpfr_set_si(r6214465, mpfr_cmp(r6214454, r6214464) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r6214469, r6214454, r6214468, MPFR_RNDN);
        mpfr_mul(r6214470, r6214467, r6214469, MPFR_RNDN);
        mpfr_mul(r6214471, r6214454, r6214454, MPFR_RNDN);
        ;
        mpfr_mul(r6214473, r6214471, r6214472, MPFR_RNDN);
        mpfr_sub(r6214474, r6214470, r6214473, MPFR_RNDN);
        mpfr_add(r6214475, r6214466, r6214474, MPFR_RNDN);
        if (mpfr_get_si(r6214465, MPFR_RNDN)) { mpfr_set(r6214476, r6214475, MPFR_RNDN); } else { mpfr_set(r6214476, r6214463, MPFR_RNDN); };
        if (mpfr_get_si(r6214456, MPFR_RNDN)) { mpfr_set(r6214477, r6214463, MPFR_RNDN); } else { mpfr_set(r6214477, r6214476, MPFR_RNDN); };
        return mpfr_get_d(r6214477, MPFR_RNDN);
}

static mpfr_t r6214478, r6214479, r6214480, r6214481, r6214482, r6214483, r6214484, r6214485, r6214486, r6214487, r6214488, r6214489, r6214490, r6214491, r6214492, r6214493, r6214494, r6214495, r6214496, r6214497, r6214498, r6214499, r6214500, r6214501;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r6214478);
        mpfr_init_set_str(r6214479, "-0.013032351641669214", 10, MPFR_RNDN);
        mpfr_init(r6214480);
        mpfr_init(r6214481);
        mpfr_init(r6214482);
        mpfr_init_set_str(r6214483, "1", 10, MPFR_RNDN);
        mpfr_init(r6214484);
        mpfr_init(r6214485);
        mpfr_init(r6214486);
        mpfr_init(r6214487);
        mpfr_init_set_str(r6214488, "0.00982517273317034", 10, MPFR_RNDN);
        mpfr_init(r6214489);
        mpfr_init_set_str(r6214490, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r6214491, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r6214492, "4", 10, MPFR_RNDN);
        mpfr_init(r6214493);
        mpfr_init(r6214494);
        mpfr_init(r6214495);
        mpfr_init_set_str(r6214496, "1/24", 10, MPFR_RNDN);
        mpfr_init(r6214497);
        mpfr_init(r6214498);
        mpfr_init(r6214499);
        mpfr_init(r6214500);
        mpfr_init(r6214501);
}

double f_dm(double x) {
        mpfr_set_d(r6214478, x, MPFR_RNDN);
        ;
        mpfr_set_si(r6214480, mpfr_cmp(r6214478, r6214479) <= 0, MPFR_RNDN);
        mpfr_sin(r6214481, r6214478, MPFR_RNDN);
        mpfr_div(r6214482, r6214481, r6214478, MPFR_RNDN);
        ;
        mpfr_cos(r6214484, r6214478, MPFR_RNDN);
        mpfr_add(r6214485, r6214483, r6214484, MPFR_RNDN);
        mpfr_div(r6214486, r6214485, r6214482, MPFR_RNDN);
        mpfr_div(r6214487, r6214482, r6214486, MPFR_RNDN);
        ;
        mpfr_set_si(r6214489, mpfr_cmp(r6214478, r6214488) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r6214493, r6214478, r6214492, MPFR_RNDN);
        mpfr_mul(r6214494, r6214491, r6214493, MPFR_RNDN);
        mpfr_mul(r6214495, r6214478, r6214478, MPFR_RNDN);
        ;
        mpfr_mul(r6214497, r6214495, r6214496, MPFR_RNDN);
        mpfr_sub(r6214498, r6214494, r6214497, MPFR_RNDN);
        mpfr_add(r6214499, r6214490, r6214498, MPFR_RNDN);
        if (mpfr_get_si(r6214489, MPFR_RNDN)) { mpfr_set(r6214500, r6214499, MPFR_RNDN); } else { mpfr_set(r6214500, r6214487, MPFR_RNDN); };
        if (mpfr_get_si(r6214480, MPFR_RNDN)) { mpfr_set(r6214501, r6214487, MPFR_RNDN); } else { mpfr_set(r6214501, r6214500, MPFR_RNDN); };
        return mpfr_get_d(r6214501, MPFR_RNDN);
}

