#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 r21779 = 1;
        float r21780 = x;
        float r21781 = cos(r21780);
        float r21782 = r21779 - r21781;
        float r21783 = r21780 * r21780;
        float r21784 = r21782 / r21783;
        return r21784;
}

double f_id(double x) {
        double r21785 = 1;
        double r21786 = x;
        double r21787 = cos(r21786);
        double r21788 = r21785 - r21787;
        double r21789 = r21786 * r21786;
        double r21790 = r21788 / r21789;
        return r21790;
}


double f_of(float x) {
        float r21791 = x;
        float r21792 = -0.013474001228013562;
        bool r21793 = r21791 <= r21792;
        float r21794 = 1;
        float r21795 = r21794 / r21791;
        float r21796 = cos(r21791);
        float r21797 = r21794 - r21796;
        float r21798 = r21797 / r21791;
        float r21799 = r21795 * r21798;
        float r21800 = 0.0043662725802963;
        bool r21801 = r21791 <= r21800;
        float r21802 = 4;
        float r21803 = pow(r21791, r21802);
        float r21804 = 1/720;
        float r21805 = 1/2;
        float r21806 = fma(r21803, r21804, r21805);
        float r21807 = 1/24;
        float r21808 = r21807 * r21791;
        float r21809 = r21791 * r21808;
        float r21810 = r21806 - r21809;
        float r21811 = sin(r21791);
        float r21812 = -r21811;
        float r21813 = 2;
        float r21814 = r21791 / r21813;
        float r21815 = tan(r21814);
        float r21816 = r21812 * r21815;
        float r21817 = r21791 * r21791;
        float r21818 = -r21817;
        float r21819 = r21816 / r21818;
        float r21820 = r21801 ? r21810 : r21819;
        float r21821 = r21793 ? r21799 : r21820;
        return r21821;
}

double f_od(double x) {
        double r21822 = x;
        double r21823 = -0.013474001228013562;
        bool r21824 = r21822 <= r21823;
        double r21825 = 1;
        double r21826 = r21825 / r21822;
        double r21827 = cos(r21822);
        double r21828 = r21825 - r21827;
        double r21829 = r21828 / r21822;
        double r21830 = r21826 * r21829;
        double r21831 = 0.0043662725802963;
        bool r21832 = r21822 <= r21831;
        double r21833 = 4;
        double r21834 = pow(r21822, r21833);
        double r21835 = 1/720;
        double r21836 = 1/2;
        double r21837 = fma(r21834, r21835, r21836);
        double r21838 = 1/24;
        double r21839 = r21838 * r21822;
        double r21840 = r21822 * r21839;
        double r21841 = r21837 - r21840;
        double r21842 = sin(r21822);
        double r21843 = -r21842;
        double r21844 = 2;
        double r21845 = r21822 / r21844;
        double r21846 = tan(r21845);
        double r21847 = r21843 * r21846;
        double r21848 = r21822 * r21822;
        double r21849 = -r21848;
        double r21850 = r21847 / r21849;
        double r21851 = r21832 ? r21841 : r21850;
        double r21852 = r21824 ? r21830 : r21851;
        return r21852;
}

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 r21853, r21854, r21855, r21856, r21857, r21858;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r21853, "1", 10, MPFR_RNDN);
        mpfr_init(r21854);
        mpfr_init(r21855);
        mpfr_init(r21856);
        mpfr_init(r21857);
        mpfr_init(r21858);
}

double f_im(double x) {
        ;
        mpfr_set_d(r21854, x, MPFR_RNDN);
        mpfr_cos(r21855, r21854, MPFR_RNDN);
        mpfr_sub(r21856, r21853, r21855, MPFR_RNDN);
        mpfr_mul(r21857, r21854, r21854, MPFR_RNDN);
        mpfr_div(r21858, r21856, r21857, MPFR_RNDN);
        return mpfr_get_d(r21858, MPFR_RNDN);
}

static mpfr_t r21859, r21860, r21861, r21862, r21863, r21864, r21865, r21866, r21867, r21868, r21869, r21870, r21871, r21872, r21873, r21874, r21875, r21876, r21877, r21878, r21879, r21880, r21881, r21882, r21883, r21884, r21885, r21886, r21887, r21888, r21889;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r21859);
        mpfr_init_set_str(r21860, "-0.013474001228013562", 10, MPFR_RNDN);
        mpfr_init(r21861);
        mpfr_init_set_str(r21862, "1", 10, MPFR_RNDN);
        mpfr_init(r21863);
        mpfr_init(r21864);
        mpfr_init(r21865);
        mpfr_init(r21866);
        mpfr_init(r21867);
        mpfr_init_set_str(r21868, "0.0043662725802963", 10, MPFR_RNDN);
        mpfr_init(r21869);
        mpfr_init_set_str(r21870, "4", 10, MPFR_RNDN);
        mpfr_init(r21871);
        mpfr_init_set_str(r21872, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r21873, "1/2", 10, MPFR_RNDN);
        mpfr_init(r21874);
        mpfr_init_set_str(r21875, "1/24", 10, MPFR_RNDN);
        mpfr_init(r21876);
        mpfr_init(r21877);
        mpfr_init(r21878);
        mpfr_init(r21879);
        mpfr_init(r21880);
        mpfr_init_set_str(r21881, "2", 10, MPFR_RNDN);
        mpfr_init(r21882);
        mpfr_init(r21883);
        mpfr_init(r21884);
        mpfr_init(r21885);
        mpfr_init(r21886);
        mpfr_init(r21887);
        mpfr_init(r21888);
        mpfr_init(r21889);
}

double f_fm(double x) {
        mpfr_set_d(r21859, x, MPFR_RNDN);
        ;
        mpfr_set_si(r21861, mpfr_cmp(r21859, r21860) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r21863, r21862, r21859, MPFR_RNDN);
        mpfr_cos(r21864, r21859, MPFR_RNDN);
        mpfr_sub(r21865, r21862, r21864, MPFR_RNDN);
        mpfr_div(r21866, r21865, r21859, MPFR_RNDN);
        mpfr_mul(r21867, r21863, r21866, MPFR_RNDN);
        ;
        mpfr_set_si(r21869, mpfr_cmp(r21859, r21868) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r21871, r21859, r21870, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r21874, r21871, r21872, r21873, MPFR_RNDN);
        ;
        mpfr_mul(r21876, r21875, r21859, MPFR_RNDN);
        mpfr_mul(r21877, r21859, r21876, MPFR_RNDN);
        mpfr_sub(r21878, r21874, r21877, MPFR_RNDN);
        mpfr_sin(r21879, r21859, MPFR_RNDN);
        mpfr_neg(r21880, r21879, MPFR_RNDN);
        ;
        mpfr_div(r21882, r21859, r21881, MPFR_RNDN);
        mpfr_tan(r21883, r21882, MPFR_RNDN);
        mpfr_mul(r21884, r21880, r21883, MPFR_RNDN);
        mpfr_mul(r21885, r21859, r21859, MPFR_RNDN);
        mpfr_neg(r21886, r21885, MPFR_RNDN);
        mpfr_div(r21887, r21884, r21886, MPFR_RNDN);
        if (mpfr_get_si(r21869, MPFR_RNDN)) { mpfr_set(r21888, r21878, MPFR_RNDN); } else { mpfr_set(r21888, r21887, MPFR_RNDN); };
        if (mpfr_get_si(r21861, MPFR_RNDN)) { mpfr_set(r21889, r21867, MPFR_RNDN); } else { mpfr_set(r21889, r21888, MPFR_RNDN); };
        return mpfr_get_d(r21889, MPFR_RNDN);
}

static mpfr_t r21890, r21891, r21892, r21893, r21894, r21895, r21896, r21897, r21898, r21899, r21900, r21901, r21902, r21903, r21904, r21905, r21906, r21907, r21908, r21909, r21910, r21911, r21912, r21913, r21914, r21915, r21916, r21917, r21918, r21919, r21920;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r21890);
        mpfr_init_set_str(r21891, "-0.013474001228013562", 10, MPFR_RNDN);
        mpfr_init(r21892);
        mpfr_init_set_str(r21893, "1", 10, MPFR_RNDN);
        mpfr_init(r21894);
        mpfr_init(r21895);
        mpfr_init(r21896);
        mpfr_init(r21897);
        mpfr_init(r21898);
        mpfr_init_set_str(r21899, "0.0043662725802963", 10, MPFR_RNDN);
        mpfr_init(r21900);
        mpfr_init_set_str(r21901, "4", 10, MPFR_RNDN);
        mpfr_init(r21902);
        mpfr_init_set_str(r21903, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r21904, "1/2", 10, MPFR_RNDN);
        mpfr_init(r21905);
        mpfr_init_set_str(r21906, "1/24", 10, MPFR_RNDN);
        mpfr_init(r21907);
        mpfr_init(r21908);
        mpfr_init(r21909);
        mpfr_init(r21910);
        mpfr_init(r21911);
        mpfr_init_set_str(r21912, "2", 10, MPFR_RNDN);
        mpfr_init(r21913);
        mpfr_init(r21914);
        mpfr_init(r21915);
        mpfr_init(r21916);
        mpfr_init(r21917);
        mpfr_init(r21918);
        mpfr_init(r21919);
        mpfr_init(r21920);
}

double f_dm(double x) {
        mpfr_set_d(r21890, x, MPFR_RNDN);
        ;
        mpfr_set_si(r21892, mpfr_cmp(r21890, r21891) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r21894, r21893, r21890, MPFR_RNDN);
        mpfr_cos(r21895, r21890, MPFR_RNDN);
        mpfr_sub(r21896, r21893, r21895, MPFR_RNDN);
        mpfr_div(r21897, r21896, r21890, MPFR_RNDN);
        mpfr_mul(r21898, r21894, r21897, MPFR_RNDN);
        ;
        mpfr_set_si(r21900, mpfr_cmp(r21890, r21899) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r21902, r21890, r21901, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r21905, r21902, r21903, r21904, MPFR_RNDN);
        ;
        mpfr_mul(r21907, r21906, r21890, MPFR_RNDN);
        mpfr_mul(r21908, r21890, r21907, MPFR_RNDN);
        mpfr_sub(r21909, r21905, r21908, MPFR_RNDN);
        mpfr_sin(r21910, r21890, MPFR_RNDN);
        mpfr_neg(r21911, r21910, MPFR_RNDN);
        ;
        mpfr_div(r21913, r21890, r21912, MPFR_RNDN);
        mpfr_tan(r21914, r21913, MPFR_RNDN);
        mpfr_mul(r21915, r21911, r21914, MPFR_RNDN);
        mpfr_mul(r21916, r21890, r21890, MPFR_RNDN);
        mpfr_neg(r21917, r21916, MPFR_RNDN);
        mpfr_div(r21918, r21915, r21917, MPFR_RNDN);
        if (mpfr_get_si(r21900, MPFR_RNDN)) { mpfr_set(r21919, r21909, MPFR_RNDN); } else { mpfr_set(r21919, r21918, MPFR_RNDN); };
        if (mpfr_get_si(r21892, MPFR_RNDN)) { mpfr_set(r21920, r21898, MPFR_RNDN); } else { mpfr_set(r21920, r21919, MPFR_RNDN); };
        return mpfr_get_d(r21920, MPFR_RNDN);
}

