#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 r8542 = 1;
        float r8543 = x;
        float r8544 = cos(r8543);
        float r8545 = r8542 - r8544;
        float r8546 = r8543 * r8543;
        float r8547 = r8545 / r8546;
        return r8547;
}

double f_id(double x) {
        double r8548 = 1;
        double r8549 = x;
        double r8550 = cos(r8549);
        double r8551 = r8548 - r8550;
        double r8552 = r8549 * r8549;
        double r8553 = r8551 / r8552;
        return r8553;
}


double f_of(float x) {
        float r8554 = x;
        float r8555 = -0.033966867866531136;
        bool r8556 = r8554 <= r8555;
        float r8557 = 0.029704376882507127;
        bool r8558 = r8554 <= r8557;
        float r8559 = !r8558;
        bool r8560 = r8556 || r8559;
        float r8561 = 1;
        float r8562 = r8561 / r8554;
        float r8563 = cos(r8554);
        float r8564 = r8561 - r8563;
        float r8565 = r8564 / r8554;
        float r8566 = r8562 * r8565;
        float r8567 = 1/720;
        float r8568 = 4;
        float r8569 = pow(r8554, r8568);
        float r8570 = 1/2;
        float r8571 = fma(r8567, r8569, r8570);
        float r8572 = 1/24;
        float r8573 = r8554 * r8572;
        float r8574 = r8554 * r8573;
        float r8575 = r8571 - r8574;
        float r8576 = r8560 ? r8566 : r8575;
        return r8576;
}

double f_od(double x) {
        double r8577 = x;
        double r8578 = -0.033966867866531136;
        bool r8579 = r8577 <= r8578;
        double r8580 = 0.029704376882507127;
        bool r8581 = r8577 <= r8580;
        double r8582 = !r8581;
        bool r8583 = r8579 || r8582;
        double r8584 = 1;
        double r8585 = r8584 / r8577;
        double r8586 = cos(r8577);
        double r8587 = r8584 - r8586;
        double r8588 = r8587 / r8577;
        double r8589 = r8585 * r8588;
        double r8590 = 1/720;
        double r8591 = 4;
        double r8592 = pow(r8577, r8591);
        double r8593 = 1/2;
        double r8594 = fma(r8590, r8592, r8593);
        double r8595 = 1/24;
        double r8596 = r8577 * r8595;
        double r8597 = r8577 * r8596;
        double r8598 = r8594 - r8597;
        double r8599 = r8583 ? r8589 : r8598;
        return r8599;
}

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 r8600, r8601, r8602, r8603, r8604, r8605;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r8600, "1", 10, MPFR_RNDN);
        mpfr_init(r8601);
        mpfr_init(r8602);
        mpfr_init(r8603);
        mpfr_init(r8604);
        mpfr_init(r8605);
}

double f_im(double x) {
        ;
        mpfr_set_d(r8601, x, MPFR_RNDN);
        mpfr_cos(r8602, r8601, MPFR_RNDN);
        mpfr_sub(r8603, r8600, r8602, MPFR_RNDN);
        mpfr_mul(r8604, r8601, r8601, MPFR_RNDN);
        mpfr_div(r8605, r8603, r8604, MPFR_RNDN);
        return mpfr_get_d(r8605, MPFR_RNDN);
}

static mpfr_t r8606, r8607, r8608, r8609, r8610, r8611, r8612, r8613, r8614, r8615, r8616, r8617, r8618, r8619, r8620, r8621, r8622, r8623, r8624, r8625, r8626, r8627, r8628;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8606);
        mpfr_init_set_str(r8607, "-0.033966867866531136", 10, MPFR_RNDN);
        mpfr_init(r8608);
        mpfr_init_set_str(r8609, "0.029704376882507127", 10, MPFR_RNDN);
        mpfr_init(r8610);
        mpfr_init(r8611);
        mpfr_init(r8612);
        mpfr_init_set_str(r8613, "1", 10, MPFR_RNDN);
        mpfr_init(r8614);
        mpfr_init(r8615);
        mpfr_init(r8616);
        mpfr_init(r8617);
        mpfr_init(r8618);
        mpfr_init_set_str(r8619, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r8620, "4", 10, MPFR_RNDN);
        mpfr_init(r8621);
        mpfr_init_set_str(r8622, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8623);
        mpfr_init_set_str(r8624, "1/24", 10, MPFR_RNDN);
        mpfr_init(r8625);
        mpfr_init(r8626);
        mpfr_init(r8627);
        mpfr_init(r8628);
}

double f_fm(double x) {
        mpfr_set_d(r8606, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8608, mpfr_cmp(r8606, r8607) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8610, mpfr_cmp(r8606, r8609) <= 0, MPFR_RNDN);
        mpfr_set_si(r8611, !mpfr_get_si(r8610, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r8612, mpfr_get_si(r8608, MPFR_RNDN) || mpfr_get_si(r8611, MPFR_RNDN), MPFR_RNDN);
        ;
        mpfr_div(r8614, r8613, r8606, MPFR_RNDN);
        mpfr_cos(r8615, r8606, MPFR_RNDN);
        mpfr_sub(r8616, r8613, r8615, MPFR_RNDN);
        mpfr_div(r8617, r8616, r8606, MPFR_RNDN);
        mpfr_mul(r8618, r8614, r8617, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8621, r8606, r8620, MPFR_RNDN);
        ;
        mpfr_fma(r8623, r8619, r8621, r8622, MPFR_RNDN);
        ;
        mpfr_mul(r8625, r8606, r8624, MPFR_RNDN);
        mpfr_mul(r8626, r8606, r8625, MPFR_RNDN);
        mpfr_sub(r8627, r8623, r8626, MPFR_RNDN);
        if (mpfr_get_si(r8612, MPFR_RNDN)) { mpfr_set(r8628, r8618, MPFR_RNDN); } else { mpfr_set(r8628, r8627, MPFR_RNDN); };
        return mpfr_get_d(r8628, MPFR_RNDN);
}

static mpfr_t r8629, r8630, r8631, r8632, r8633, r8634, r8635, r8636, r8637, r8638, r8639, r8640, r8641, r8642, r8643, r8644, r8645, r8646, r8647, r8648, r8649, r8650, r8651;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8629);
        mpfr_init_set_str(r8630, "-0.033966867866531136", 10, MPFR_RNDN);
        mpfr_init(r8631);
        mpfr_init_set_str(r8632, "0.029704376882507127", 10, MPFR_RNDN);
        mpfr_init(r8633);
        mpfr_init(r8634);
        mpfr_init(r8635);
        mpfr_init_set_str(r8636, "1", 10, MPFR_RNDN);
        mpfr_init(r8637);
        mpfr_init(r8638);
        mpfr_init(r8639);
        mpfr_init(r8640);
        mpfr_init(r8641);
        mpfr_init_set_str(r8642, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r8643, "4", 10, MPFR_RNDN);
        mpfr_init(r8644);
        mpfr_init_set_str(r8645, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8646);
        mpfr_init_set_str(r8647, "1/24", 10, MPFR_RNDN);
        mpfr_init(r8648);
        mpfr_init(r8649);
        mpfr_init(r8650);
        mpfr_init(r8651);
}

double f_dm(double x) {
        mpfr_set_d(r8629, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8631, mpfr_cmp(r8629, r8630) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8633, mpfr_cmp(r8629, r8632) <= 0, MPFR_RNDN);
        mpfr_set_si(r8634, !mpfr_get_si(r8633, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r8635, mpfr_get_si(r8631, MPFR_RNDN) || mpfr_get_si(r8634, MPFR_RNDN), MPFR_RNDN);
        ;
        mpfr_div(r8637, r8636, r8629, MPFR_RNDN);
        mpfr_cos(r8638, r8629, MPFR_RNDN);
        mpfr_sub(r8639, r8636, r8638, MPFR_RNDN);
        mpfr_div(r8640, r8639, r8629, MPFR_RNDN);
        mpfr_mul(r8641, r8637, r8640, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8644, r8629, r8643, MPFR_RNDN);
        ;
        mpfr_fma(r8646, r8642, r8644, r8645, MPFR_RNDN);
        ;
        mpfr_mul(r8648, r8629, r8647, MPFR_RNDN);
        mpfr_mul(r8649, r8629, r8648, MPFR_RNDN);
        mpfr_sub(r8650, r8646, r8649, MPFR_RNDN);
        if (mpfr_get_si(r8635, MPFR_RNDN)) { mpfr_set(r8651, r8641, MPFR_RNDN); } else { mpfr_set(r8651, r8650, MPFR_RNDN); };
        return mpfr_get_d(r8651, MPFR_RNDN);
}

