#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 r4874446 = 1.0f;
        float r4874447 = x;
        float r4874448 = cos(r4874447);
        float r4874449 = r4874446 - r4874448;
        float r4874450 = r4874447 * r4874447;
        float r4874451 = r4874449 / r4874450;
        return r4874451;
}

double f_id(double x) {
        double r4874452 = 1.0;
        double r4874453 = x;
        double r4874454 = cos(r4874453);
        double r4874455 = r4874452 - r4874454;
        double r4874456 = r4874453 * r4874453;
        double r4874457 = r4874455 / r4874456;
        return r4874457;
}


double f_of(float x) {
        float r4874458 = x;
        float r4874459 = -3.859884253300168e-07f;
        bool r4874460 = r4874458 <= r4874459;
        float r4874461 = 1.0f;
        float r4874462 = r4874461 / r4874458;
        float r4874463 = cos(r4874458);
        float r4874464 = r4874461 - r4874463;
        float r4874465 = r4874464 / r4874458;
        float r4874466 = r4874462 * r4874465;
        float r4874467 = 0.1441617602023804f;
        bool r4874468 = r4874458 <= r4874467;
        float r4874469 = 0.001388888888888889f;
        float r4874470 = 4.0f;
        float r4874471 = pow(r4874458, r4874470);
        float r4874472 = r4874469 * r4874471;
        float r4874473 = 0.5f;
        float r4874474 = r4874472 + r4874473;
        float r4874475 = 0.041666666666666664f;
        float r4874476 = 2.0f;
        float r4874477 = pow(r4874458, r4874476);
        float r4874478 = r4874475 * r4874477;
        float r4874479 = r4874474 - r4874478;
        float r4874480 = sin(r4874458);
        float r4874481 = r4874480 * r4874480;
        float r4874482 = r4874458 * r4874458;
        float r4874483 = r4874461 + r4874463;
        float r4874484 = r4874461 / r4874483;
        float r4874485 = r4874482 / r4874484;
        float r4874486 = r4874481 / r4874485;
        float r4874487 = r4874468 ? r4874479 : r4874486;
        float r4874488 = r4874460 ? r4874466 : r4874487;
        return r4874488;
}

double f_od(double x) {
        double r4874489 = x;
        double r4874490 = -3.859884253300168e-07;
        bool r4874491 = r4874489 <= r4874490;
        double r4874492 = 1.0;
        double r4874493 = r4874492 / r4874489;
        double r4874494 = cos(r4874489);
        double r4874495 = r4874492 - r4874494;
        double r4874496 = r4874495 / r4874489;
        double r4874497 = r4874493 * r4874496;
        double r4874498 = 0.1441617602023804;
        bool r4874499 = r4874489 <= r4874498;
        double r4874500 = 0.001388888888888889;
        double r4874501 = 4.0;
        double r4874502 = pow(r4874489, r4874501);
        double r4874503 = r4874500 * r4874502;
        double r4874504 = 0.5;
        double r4874505 = r4874503 + r4874504;
        double r4874506 = 0.041666666666666664;
        double r4874507 = 2.0;
        double r4874508 = pow(r4874489, r4874507);
        double r4874509 = r4874506 * r4874508;
        double r4874510 = r4874505 - r4874509;
        double r4874511 = sin(r4874489);
        double r4874512 = r4874511 * r4874511;
        double r4874513 = r4874489 * r4874489;
        double r4874514 = r4874492 + r4874494;
        double r4874515 = r4874492 / r4874514;
        double r4874516 = r4874513 / r4874515;
        double r4874517 = r4874512 / r4874516;
        double r4874518 = r4874499 ? r4874510 : r4874517;
        double r4874519 = r4874491 ? r4874497 : r4874518;
        return r4874519;
}

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 r4874520, r4874521, r4874522, r4874523, r4874524, r4874525;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r4874520, "1", 10, MPFR_RNDN);
        mpfr_init(r4874521);
        mpfr_init(r4874522);
        mpfr_init(r4874523);
        mpfr_init(r4874524);
        mpfr_init(r4874525);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4874521, x, MPFR_RNDN);
        mpfr_cos(r4874522, r4874521, MPFR_RNDN);
        mpfr_sub(r4874523, r4874520, r4874522, MPFR_RNDN);
        mpfr_mul(r4874524, r4874521, r4874521, MPFR_RNDN);
        mpfr_div(r4874525, r4874523, r4874524, MPFR_RNDN);
        return mpfr_get_d(r4874525, MPFR_RNDN);
}

static mpfr_t r4874526, r4874527, r4874528, r4874529, r4874530, r4874531, r4874532, r4874533, r4874534, r4874535, r4874536, r4874537, r4874538, r4874539, r4874540, r4874541, r4874542, r4874543, r4874544, r4874545, r4874546, r4874547, r4874548, r4874549, r4874550, r4874551, r4874552, r4874553, r4874554, r4874555, r4874556;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4874526);
        mpfr_init_set_str(r4874527, "-3.859884253300168e-07", 10, MPFR_RNDN);
        mpfr_init(r4874528);
        mpfr_init_set_str(r4874529, "1", 10, MPFR_RNDN);
        mpfr_init(r4874530);
        mpfr_init(r4874531);
        mpfr_init(r4874532);
        mpfr_init(r4874533);
        mpfr_init(r4874534);
        mpfr_init_set_str(r4874535, "0.1441617602023804", 10, MPFR_RNDN);
        mpfr_init(r4874536);
        mpfr_init_set_str(r4874537, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r4874538, "4", 10, MPFR_RNDN);
        mpfr_init(r4874539);
        mpfr_init(r4874540);
        mpfr_init_set_str(r4874541, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4874542);
        mpfr_init_set_str(r4874543, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r4874544, "2", 10, MPFR_RNDN);
        mpfr_init(r4874545);
        mpfr_init(r4874546);
        mpfr_init(r4874547);
        mpfr_init(r4874548);
        mpfr_init(r4874549);
        mpfr_init(r4874550);
        mpfr_init(r4874551);
        mpfr_init(r4874552);
        mpfr_init(r4874553);
        mpfr_init(r4874554);
        mpfr_init(r4874555);
        mpfr_init(r4874556);
}

double f_fm(double x) {
        mpfr_set_d(r4874526, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4874528, mpfr_cmp(r4874526, r4874527) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r4874530, r4874529, r4874526, MPFR_RNDN);
        mpfr_cos(r4874531, r4874526, MPFR_RNDN);
        mpfr_sub(r4874532, r4874529, r4874531, MPFR_RNDN);
        mpfr_div(r4874533, r4874532, r4874526, MPFR_RNDN);
        mpfr_mul(r4874534, r4874530, r4874533, MPFR_RNDN);
        ;
        mpfr_set_si(r4874536, mpfr_cmp(r4874526, r4874535) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4874539, r4874526, r4874538, MPFR_RNDN);
        mpfr_mul(r4874540, r4874537, r4874539, MPFR_RNDN);
        ;
        mpfr_add(r4874542, r4874540, r4874541, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4874545, r4874526, r4874544, MPFR_RNDN);
        mpfr_mul(r4874546, r4874543, r4874545, MPFR_RNDN);
        mpfr_sub(r4874547, r4874542, r4874546, MPFR_RNDN);
        mpfr_sin(r4874548, r4874526, MPFR_RNDN);
        mpfr_mul(r4874549, r4874548, r4874548, MPFR_RNDN);
        mpfr_mul(r4874550, r4874526, r4874526, MPFR_RNDN);
        mpfr_add(r4874551, r4874529, r4874531, MPFR_RNDN);
        mpfr_div(r4874552, r4874529, r4874551, MPFR_RNDN);
        mpfr_div(r4874553, r4874550, r4874552, MPFR_RNDN);
        mpfr_div(r4874554, r4874549, r4874553, MPFR_RNDN);
        if (mpfr_get_si(r4874536, MPFR_RNDN)) { mpfr_set(r4874555, r4874547, MPFR_RNDN); } else { mpfr_set(r4874555, r4874554, MPFR_RNDN); };
        if (mpfr_get_si(r4874528, MPFR_RNDN)) { mpfr_set(r4874556, r4874534, MPFR_RNDN); } else { mpfr_set(r4874556, r4874555, MPFR_RNDN); };
        return mpfr_get_d(r4874556, MPFR_RNDN);
}

static mpfr_t r4874557, r4874558, r4874559, r4874560, r4874561, r4874562, r4874563, r4874564, r4874565, r4874566, r4874567, r4874568, r4874569, r4874570, r4874571, r4874572, r4874573, r4874574, r4874575, r4874576, r4874577, r4874578, r4874579, r4874580, r4874581, r4874582, r4874583, r4874584, r4874585, r4874586, r4874587;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4874557);
        mpfr_init_set_str(r4874558, "-3.859884253300168e-07", 10, MPFR_RNDN);
        mpfr_init(r4874559);
        mpfr_init_set_str(r4874560, "1", 10, MPFR_RNDN);
        mpfr_init(r4874561);
        mpfr_init(r4874562);
        mpfr_init(r4874563);
        mpfr_init(r4874564);
        mpfr_init(r4874565);
        mpfr_init_set_str(r4874566, "0.1441617602023804", 10, MPFR_RNDN);
        mpfr_init(r4874567);
        mpfr_init_set_str(r4874568, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r4874569, "4", 10, MPFR_RNDN);
        mpfr_init(r4874570);
        mpfr_init(r4874571);
        mpfr_init_set_str(r4874572, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4874573);
        mpfr_init_set_str(r4874574, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r4874575, "2", 10, MPFR_RNDN);
        mpfr_init(r4874576);
        mpfr_init(r4874577);
        mpfr_init(r4874578);
        mpfr_init(r4874579);
        mpfr_init(r4874580);
        mpfr_init(r4874581);
        mpfr_init(r4874582);
        mpfr_init(r4874583);
        mpfr_init(r4874584);
        mpfr_init(r4874585);
        mpfr_init(r4874586);
        mpfr_init(r4874587);
}

double f_dm(double x) {
        mpfr_set_d(r4874557, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4874559, mpfr_cmp(r4874557, r4874558) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r4874561, r4874560, r4874557, MPFR_RNDN);
        mpfr_cos(r4874562, r4874557, MPFR_RNDN);
        mpfr_sub(r4874563, r4874560, r4874562, MPFR_RNDN);
        mpfr_div(r4874564, r4874563, r4874557, MPFR_RNDN);
        mpfr_mul(r4874565, r4874561, r4874564, MPFR_RNDN);
        ;
        mpfr_set_si(r4874567, mpfr_cmp(r4874557, r4874566) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4874570, r4874557, r4874569, MPFR_RNDN);
        mpfr_mul(r4874571, r4874568, r4874570, MPFR_RNDN);
        ;
        mpfr_add(r4874573, r4874571, r4874572, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4874576, r4874557, r4874575, MPFR_RNDN);
        mpfr_mul(r4874577, r4874574, r4874576, MPFR_RNDN);
        mpfr_sub(r4874578, r4874573, r4874577, MPFR_RNDN);
        mpfr_sin(r4874579, r4874557, MPFR_RNDN);
        mpfr_mul(r4874580, r4874579, r4874579, MPFR_RNDN);
        mpfr_mul(r4874581, r4874557, r4874557, MPFR_RNDN);
        mpfr_add(r4874582, r4874560, r4874562, MPFR_RNDN);
        mpfr_div(r4874583, r4874560, r4874582, MPFR_RNDN);
        mpfr_div(r4874584, r4874581, r4874583, MPFR_RNDN);
        mpfr_div(r4874585, r4874580, r4874584, MPFR_RNDN);
        if (mpfr_get_si(r4874567, MPFR_RNDN)) { mpfr_set(r4874586, r4874578, MPFR_RNDN); } else { mpfr_set(r4874586, r4874585, MPFR_RNDN); };
        if (mpfr_get_si(r4874559, MPFR_RNDN)) { mpfr_set(r4874587, r4874565, MPFR_RNDN); } else { mpfr_set(r4874587, r4874586, MPFR_RNDN); };
        return mpfr_get_d(r4874587, MPFR_RNDN);
}

