#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 r19696 = 1;
        float r19697 = x;
        float r19698 = cos(r19697);
        float r19699 = r19696 - r19698;
        float r19700 = r19697 * r19697;
        float r19701 = r19699 / r19700;
        return r19701;
}

double f_id(double x) {
        double r19702 = 1;
        double r19703 = x;
        double r19704 = cos(r19703);
        double r19705 = r19702 - r19704;
        double r19706 = r19703 * r19703;
        double r19707 = r19705 / r19706;
        return r19707;
}


double f_of(float x) {
        float r19708 = x;
        float r19709 = -1.7387217572195604e-16;
        bool r19710 = r19708 <= r19709;
        float r19711 = sin(r19708);
        float r19712 = r19711 * r19711;
        float r19713 = 1;
        float r19714 = cos(r19708);
        float r19715 = r19713 + r19714;
        float r19716 = r19712 / r19715;
        float r19717 = r19708 * r19708;
        float r19718 = r19713 / r19717;
        float r19719 = r19716 * r19718;
        float r19720 = 2500116.352981572;
        bool r19721 = r19708 <= r19720;
        float r19722 = 1/2;
        float r19723 = 1/720;
        float r19724 = 4;
        float r19725 = pow(r19708, r19724);
        float r19726 = r19723 * r19725;
        float r19727 = r19722 + r19726;
        float r19728 = 1/24;
        float r19729 = 2;
        float r19730 = pow(r19708, r19729);
        float r19731 = r19728 * r19730;
        float r19732 = r19727 - r19731;
        float r19733 = cbrt(r19715);
        float r19734 = r19733 * r19733;
        float r19735 = r19711 / r19734;
        float r19736 = r19735 / r19708;
        float r19737 = r19711 / r19733;
        float r19738 = r19737 / r19708;
        float r19739 = r19736 * r19738;
        float r19740 = r19721 ? r19732 : r19739;
        float r19741 = r19710 ? r19719 : r19740;
        return r19741;
}

double f_od(double x) {
        double r19742 = x;
        double r19743 = -1.7387217572195604e-16;
        bool r19744 = r19742 <= r19743;
        double r19745 = sin(r19742);
        double r19746 = r19745 * r19745;
        double r19747 = 1;
        double r19748 = cos(r19742);
        double r19749 = r19747 + r19748;
        double r19750 = r19746 / r19749;
        double r19751 = r19742 * r19742;
        double r19752 = r19747 / r19751;
        double r19753 = r19750 * r19752;
        double r19754 = 2500116.352981572;
        bool r19755 = r19742 <= r19754;
        double r19756 = 1/2;
        double r19757 = 1/720;
        double r19758 = 4;
        double r19759 = pow(r19742, r19758);
        double r19760 = r19757 * r19759;
        double r19761 = r19756 + r19760;
        double r19762 = 1/24;
        double r19763 = 2;
        double r19764 = pow(r19742, r19763);
        double r19765 = r19762 * r19764;
        double r19766 = r19761 - r19765;
        double r19767 = cbrt(r19749);
        double r19768 = r19767 * r19767;
        double r19769 = r19745 / r19768;
        double r19770 = r19769 / r19742;
        double r19771 = r19745 / r19767;
        double r19772 = r19771 / r19742;
        double r19773 = r19770 * r19772;
        double r19774 = r19755 ? r19766 : r19773;
        double r19775 = r19744 ? r19753 : r19774;
        return r19775;
}

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 r19776, r19777, r19778, r19779, r19780, r19781;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r19776, "1", 10, MPFR_RNDN);
        mpfr_init(r19777);
        mpfr_init(r19778);
        mpfr_init(r19779);
        mpfr_init(r19780);
        mpfr_init(r19781);
}

double f_im(double x) {
        ;
        mpfr_set_d(r19777, x, MPFR_RNDN);
        mpfr_cos(r19778, r19777, MPFR_RNDN);
        mpfr_sub(r19779, r19776, r19778, MPFR_RNDN);
        mpfr_mul(r19780, r19777, r19777, MPFR_RNDN);
        mpfr_div(r19781, r19779, r19780, MPFR_RNDN);
        return mpfr_get_d(r19781, MPFR_RNDN);
}

static mpfr_t r19782, r19783, r19784, r19785, r19786, r19787, r19788, r19789, r19790, r19791, r19792, r19793, r19794, r19795, r19796, r19797, r19798, r19799, r19800, r19801, r19802, r19803, r19804, r19805, r19806, r19807, r19808, r19809, r19810, r19811, r19812, r19813, r19814, r19815;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19782);
        mpfr_init_set_str(r19783, "-1.7387217572195604e-16", 10, MPFR_RNDN);
        mpfr_init(r19784);
        mpfr_init(r19785);
        mpfr_init(r19786);
        mpfr_init_set_str(r19787, "1", 10, MPFR_RNDN);
        mpfr_init(r19788);
        mpfr_init(r19789);
        mpfr_init(r19790);
        mpfr_init(r19791);
        mpfr_init(r19792);
        mpfr_init(r19793);
        mpfr_init_set_str(r19794, "2500116.352981572", 10, MPFR_RNDN);
        mpfr_init(r19795);
        mpfr_init_set_str(r19796, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r19797, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r19798, "4", 10, MPFR_RNDN);
        mpfr_init(r19799);
        mpfr_init(r19800);
        mpfr_init(r19801);
        mpfr_init_set_str(r19802, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r19803, "2", 10, MPFR_RNDN);
        mpfr_init(r19804);
        mpfr_init(r19805);
        mpfr_init(r19806);
        mpfr_init(r19807);
        mpfr_init(r19808);
        mpfr_init(r19809);
        mpfr_init(r19810);
        mpfr_init(r19811);
        mpfr_init(r19812);
        mpfr_init(r19813);
        mpfr_init(r19814);
        mpfr_init(r19815);
}

double f_fm(double x) {
        mpfr_set_d(r19782, x, MPFR_RNDN);
        ;
        mpfr_set_si(r19784, mpfr_cmp(r19782, r19783) <= 0, MPFR_RNDN);
        mpfr_sin(r19785, r19782, MPFR_RNDN);
        mpfr_mul(r19786, r19785, r19785, MPFR_RNDN);
        ;
        mpfr_cos(r19788, r19782, MPFR_RNDN);
        mpfr_add(r19789, r19787, r19788, MPFR_RNDN);
        mpfr_div(r19790, r19786, r19789, MPFR_RNDN);
        mpfr_mul(r19791, r19782, r19782, MPFR_RNDN);
        mpfr_div(r19792, r19787, r19791, MPFR_RNDN);
        mpfr_mul(r19793, r19790, r19792, MPFR_RNDN);
        ;
        mpfr_set_si(r19795, mpfr_cmp(r19782, r19794) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r19799, r19782, r19798, MPFR_RNDN);
        mpfr_mul(r19800, r19797, r19799, MPFR_RNDN);
        mpfr_add(r19801, r19796, r19800, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r19804, r19782, r19803, MPFR_RNDN);
        mpfr_mul(r19805, r19802, r19804, MPFR_RNDN);
        mpfr_sub(r19806, r19801, r19805, MPFR_RNDN);
        mpfr_cbrt(r19807, r19789, MPFR_RNDN);
        mpfr_mul(r19808, r19807, r19807, MPFR_RNDN);
        mpfr_div(r19809, r19785, r19808, MPFR_RNDN);
        mpfr_div(r19810, r19809, r19782, MPFR_RNDN);
        mpfr_div(r19811, r19785, r19807, MPFR_RNDN);
        mpfr_div(r19812, r19811, r19782, MPFR_RNDN);
        mpfr_mul(r19813, r19810, r19812, MPFR_RNDN);
        if (mpfr_get_si(r19795, MPFR_RNDN)) { mpfr_set(r19814, r19806, MPFR_RNDN); } else { mpfr_set(r19814, r19813, MPFR_RNDN); };
        if (mpfr_get_si(r19784, MPFR_RNDN)) { mpfr_set(r19815, r19793, MPFR_RNDN); } else { mpfr_set(r19815, r19814, MPFR_RNDN); };
        return mpfr_get_d(r19815, MPFR_RNDN);
}

static mpfr_t r19816, r19817, r19818, r19819, r19820, r19821, r19822, r19823, r19824, r19825, r19826, r19827, r19828, r19829, r19830, r19831, r19832, r19833, r19834, r19835, r19836, r19837, r19838, r19839, r19840, r19841, r19842, r19843, r19844, r19845, r19846, r19847, r19848, r19849;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r19816);
        mpfr_init_set_str(r19817, "-1.7387217572195604e-16", 10, MPFR_RNDN);
        mpfr_init(r19818);
        mpfr_init(r19819);
        mpfr_init(r19820);
        mpfr_init_set_str(r19821, "1", 10, MPFR_RNDN);
        mpfr_init(r19822);
        mpfr_init(r19823);
        mpfr_init(r19824);
        mpfr_init(r19825);
        mpfr_init(r19826);
        mpfr_init(r19827);
        mpfr_init_set_str(r19828, "2500116.352981572", 10, MPFR_RNDN);
        mpfr_init(r19829);
        mpfr_init_set_str(r19830, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r19831, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r19832, "4", 10, MPFR_RNDN);
        mpfr_init(r19833);
        mpfr_init(r19834);
        mpfr_init(r19835);
        mpfr_init_set_str(r19836, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r19837, "2", 10, MPFR_RNDN);
        mpfr_init(r19838);
        mpfr_init(r19839);
        mpfr_init(r19840);
        mpfr_init(r19841);
        mpfr_init(r19842);
        mpfr_init(r19843);
        mpfr_init(r19844);
        mpfr_init(r19845);
        mpfr_init(r19846);
        mpfr_init(r19847);
        mpfr_init(r19848);
        mpfr_init(r19849);
}

double f_dm(double x) {
        mpfr_set_d(r19816, x, MPFR_RNDN);
        ;
        mpfr_set_si(r19818, mpfr_cmp(r19816, r19817) <= 0, MPFR_RNDN);
        mpfr_sin(r19819, r19816, MPFR_RNDN);
        mpfr_mul(r19820, r19819, r19819, MPFR_RNDN);
        ;
        mpfr_cos(r19822, r19816, MPFR_RNDN);
        mpfr_add(r19823, r19821, r19822, MPFR_RNDN);
        mpfr_div(r19824, r19820, r19823, MPFR_RNDN);
        mpfr_mul(r19825, r19816, r19816, MPFR_RNDN);
        mpfr_div(r19826, r19821, r19825, MPFR_RNDN);
        mpfr_mul(r19827, r19824, r19826, MPFR_RNDN);
        ;
        mpfr_set_si(r19829, mpfr_cmp(r19816, r19828) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r19833, r19816, r19832, MPFR_RNDN);
        mpfr_mul(r19834, r19831, r19833, MPFR_RNDN);
        mpfr_add(r19835, r19830, r19834, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r19838, r19816, r19837, MPFR_RNDN);
        mpfr_mul(r19839, r19836, r19838, MPFR_RNDN);
        mpfr_sub(r19840, r19835, r19839, MPFR_RNDN);
        mpfr_cbrt(r19841, r19823, MPFR_RNDN);
        mpfr_mul(r19842, r19841, r19841, MPFR_RNDN);
        mpfr_div(r19843, r19819, r19842, MPFR_RNDN);
        mpfr_div(r19844, r19843, r19816, MPFR_RNDN);
        mpfr_div(r19845, r19819, r19841, MPFR_RNDN);
        mpfr_div(r19846, r19845, r19816, MPFR_RNDN);
        mpfr_mul(r19847, r19844, r19846, MPFR_RNDN);
        if (mpfr_get_si(r19829, MPFR_RNDN)) { mpfr_set(r19848, r19840, MPFR_RNDN); } else { mpfr_set(r19848, r19847, MPFR_RNDN); };
        if (mpfr_get_si(r19818, MPFR_RNDN)) { mpfr_set(r19849, r19827, MPFR_RNDN); } else { mpfr_set(r19849, r19848, MPFR_RNDN); };
        return mpfr_get_d(r19849, MPFR_RNDN);
}

