#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "NMSE problem 3.4.1";

double f_if(float x) {
        float r15159 = 1.0f;
        float r15160 = x;
        float r15161 = cos(r15160);
        float r15162 = r15159 - r15161;
        float r15163 = r15160 * r15160;
        float r15164 = r15162 / r15163;
        return r15164;
}

double f_id(double x) {
        double r15165 = 1.0;
        double r15166 = x;
        double r15167 = cos(r15166);
        double r15168 = r15165 - r15167;
        double r15169 = r15166 * r15166;
        double r15170 = r15168 / r15169;
        return r15170;
}


double f_of(float x) {
        float r15171 = x;
        float r15172 = -0.2356608510017395f;
        bool r15173 = r15171 <= r15172;
        float r15174 = 1.0f;
        float r15175 = r15174 / r15171;
        float r15176 = cos(r15171);
        float r15177 = r15174 - r15176;
        float r15178 = r15177 / r15171;
        float r15179 = r15175 * r15178;
        float r15180 = 0.5589792728424072f;
        bool r15181 = r15171 <= r15180;
        float r15182 = 0.0013888889225199819f;
        float r15183 = 4.0f;
        float r15184 = pow(r15171, r15183);
        float r15185 = r15182 * r15184;
        float r15186 = 0.5f;
        float r15187 = r15185 + r15186;
        float r15188 = 0.0416666679084301f;
        float r15189 = r15171 * r15171;
        float r15190 = r15188 * r15189;
        float r15191 = r15187 - r15190;
        float r15192 = sin(r15171);
        float r15193 = r15192 * r15192;
        float r15194 = r15174 + r15176;
        float r15195 = r15193 / r15194;
        float r15196 = sqrt(r15195);
        float r15197 = r15196 / r15171;
        float r15198 = r15197 * r15197;
        float r15199 = r15181 ? r15191 : r15198;
        float r15200 = r15173 ? r15179 : r15199;
        return r15200;
}

double f_od(double x) {
        double r15201 = x;
        double r15202 = -0.2356608510017395;
        bool r15203 = r15201 <= r15202;
        double r15204 = 1.0;
        double r15205 = r15204 / r15201;
        double r15206 = cos(r15201);
        double r15207 = r15204 - r15206;
        double r15208 = r15207 / r15201;
        double r15209 = r15205 * r15208;
        double r15210 = 0.5589792728424072;
        bool r15211 = r15201 <= r15210;
        double r15212 = 0.0013888889225199819;
        double r15213 = 4.0;
        double r15214 = pow(r15201, r15213);
        double r15215 = r15212 * r15214;
        double r15216 = 0.5;
        double r15217 = r15215 + r15216;
        double r15218 = 0.0416666679084301;
        double r15219 = r15201 * r15201;
        double r15220 = r15218 * r15219;
        double r15221 = r15217 - r15220;
        double r15222 = sin(r15201);
        double r15223 = r15222 * r15222;
        double r15224 = r15204 + r15206;
        double r15225 = r15223 / r15224;
        double r15226 = sqrt(r15225);
        double r15227 = r15226 / r15201;
        double r15228 = r15227 * r15227;
        double r15229 = r15211 ? r15221 : r15228;
        double r15230 = r15203 ? r15209 : r15229;
        return r15230;
}

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 r15231, r15232, r15233, r15234, r15235, r15236;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r15231, "1", 10, MPFR_RNDN);
        mpfr_init(r15232);
        mpfr_init(r15233);
        mpfr_init(r15234);
        mpfr_init(r15235);
        mpfr_init(r15236);
}

double f_im(double x) {
        ;
        mpfr_set_d(r15232, x, MPFR_RNDN);
        mpfr_cos(r15233, r15232, MPFR_RNDN);
        mpfr_sub(r15234, r15231, r15233, MPFR_RNDN);
        mpfr_sqr(r15235, r15232, MPFR_RNDN);
        mpfr_div(r15236, r15234, r15235, MPFR_RNDN);
        return mpfr_get_d(r15236, MPFR_RNDN);
}

static mpfr_t r15237, r15238, r15239, r15240, r15241, r15242, r15243, r15244, r15245, r15246, r15247, r15248, r15249, r15250, r15251, r15252, r15253, r15254, r15255, r15256, r15257, r15258, r15259, r15260, r15261, r15262, r15263, r15264, r15265, r15266;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15237);
        mpfr_init_set_str(r15238, "-0.23566085f0", 10, MPFR_RNDN);
        mpfr_init(r15239);
        mpfr_init_set_str(r15240, "1", 10, MPFR_RNDN);
        mpfr_init(r15241);
        mpfr_init(r15242);
        mpfr_init(r15243);
        mpfr_init(r15244);
        mpfr_init(r15245);
        mpfr_init_set_str(r15246, "0.5589793f0", 10, MPFR_RNDN);
        mpfr_init(r15247);
        mpfr_init_set_str(r15248, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r15249, "4", 10, MPFR_RNDN);
        mpfr_init(r15250);
        mpfr_init(r15251);
        mpfr_init_set_str(r15252, "1/2", 10, MPFR_RNDN);
        mpfr_init(r15253);
        mpfr_init_set_str(r15254, "1/24", 10, MPFR_RNDN);
        mpfr_init(r15255);
        mpfr_init(r15256);
        mpfr_init(r15257);
        mpfr_init(r15258);
        mpfr_init(r15259);
        mpfr_init(r15260);
        mpfr_init(r15261);
        mpfr_init(r15262);
        mpfr_init(r15263);
        mpfr_init(r15264);
        mpfr_init(r15265);
        mpfr_init(r15266);
}

double f_fm(double x) {
        mpfr_set_d(r15237, x, MPFR_RNDN);
        ;
        mpfr_set_si(r15239, mpfr_cmp(r15237, r15238) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r15241, r15240, r15237, MPFR_RNDN);
        mpfr_cos(r15242, r15237, MPFR_RNDN);
        mpfr_sub(r15243, r15240, r15242, MPFR_RNDN);
        mpfr_div(r15244, r15243, r15237, MPFR_RNDN);
        mpfr_mul(r15245, r15241, r15244, MPFR_RNDN);
        ;
        mpfr_set_si(r15247, mpfr_cmp(r15237, r15246) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r15250, r15237, r15249, MPFR_RNDN);
        mpfr_mul(r15251, r15248, r15250, MPFR_RNDN);
        ;
        mpfr_add(r15253, r15251, r15252, MPFR_RNDN);
        ;
        mpfr_sqr(r15255, r15237, MPFR_RNDN);
        mpfr_mul(r15256, r15254, r15255, MPFR_RNDN);
        mpfr_sub(r15257, r15253, r15256, MPFR_RNDN);
        mpfr_sin(r15258, r15237, MPFR_RNDN);
        mpfr_sqr(r15259, r15258, MPFR_RNDN);
        mpfr_add(r15260, r15240, r15242, MPFR_RNDN);
        mpfr_div(r15261, r15259, r15260, MPFR_RNDN);
        mpfr_sqrt(r15262, r15261, MPFR_RNDN);
        mpfr_div(r15263, r15262, r15237, MPFR_RNDN);
        mpfr_sqr(r15264, r15263, MPFR_RNDN);
        if (mpfr_get_si(r15247, MPFR_RNDN)) { mpfr_set(r15265, r15257, MPFR_RNDN); } else { mpfr_set(r15265, r15264, MPFR_RNDN); };
        if (mpfr_get_si(r15239, MPFR_RNDN)) { mpfr_set(r15266, r15245, MPFR_RNDN); } else { mpfr_set(r15266, r15265, MPFR_RNDN); };
        return mpfr_get_d(r15266, MPFR_RNDN);
}

static mpfr_t r15267, r15268, r15269, r15270, r15271, r15272, r15273, r15274, r15275, r15276, r15277, r15278, r15279, r15280, r15281, r15282, r15283, r15284, r15285, r15286, r15287, r15288, r15289, r15290, r15291, r15292, r15293, r15294, r15295, r15296;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15267);
        mpfr_init_set_str(r15268, "-0.23566085f0", 10, MPFR_RNDN);
        mpfr_init(r15269);
        mpfr_init_set_str(r15270, "1", 10, MPFR_RNDN);
        mpfr_init(r15271);
        mpfr_init(r15272);
        mpfr_init(r15273);
        mpfr_init(r15274);
        mpfr_init(r15275);
        mpfr_init_set_str(r15276, "0.5589793f0", 10, MPFR_RNDN);
        mpfr_init(r15277);
        mpfr_init_set_str(r15278, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r15279, "4", 10, MPFR_RNDN);
        mpfr_init(r15280);
        mpfr_init(r15281);
        mpfr_init_set_str(r15282, "1/2", 10, MPFR_RNDN);
        mpfr_init(r15283);
        mpfr_init_set_str(r15284, "1/24", 10, MPFR_RNDN);
        mpfr_init(r15285);
        mpfr_init(r15286);
        mpfr_init(r15287);
        mpfr_init(r15288);
        mpfr_init(r15289);
        mpfr_init(r15290);
        mpfr_init(r15291);
        mpfr_init(r15292);
        mpfr_init(r15293);
        mpfr_init(r15294);
        mpfr_init(r15295);
        mpfr_init(r15296);
}

double f_dm(double x) {
        mpfr_set_d(r15267, x, MPFR_RNDN);
        ;
        mpfr_set_si(r15269, mpfr_cmp(r15267, r15268) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r15271, r15270, r15267, MPFR_RNDN);
        mpfr_cos(r15272, r15267, MPFR_RNDN);
        mpfr_sub(r15273, r15270, r15272, MPFR_RNDN);
        mpfr_div(r15274, r15273, r15267, MPFR_RNDN);
        mpfr_mul(r15275, r15271, r15274, MPFR_RNDN);
        ;
        mpfr_set_si(r15277, mpfr_cmp(r15267, r15276) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r15280, r15267, r15279, MPFR_RNDN);
        mpfr_mul(r15281, r15278, r15280, MPFR_RNDN);
        ;
        mpfr_add(r15283, r15281, r15282, MPFR_RNDN);
        ;
        mpfr_sqr(r15285, r15267, MPFR_RNDN);
        mpfr_mul(r15286, r15284, r15285, MPFR_RNDN);
        mpfr_sub(r15287, r15283, r15286, MPFR_RNDN);
        mpfr_sin(r15288, r15267, MPFR_RNDN);
        mpfr_sqr(r15289, r15288, MPFR_RNDN);
        mpfr_add(r15290, r15270, r15272, MPFR_RNDN);
        mpfr_div(r15291, r15289, r15290, MPFR_RNDN);
        mpfr_sqrt(r15292, r15291, MPFR_RNDN);
        mpfr_div(r15293, r15292, r15267, MPFR_RNDN);
        mpfr_sqr(r15294, r15293, MPFR_RNDN);
        if (mpfr_get_si(r15277, MPFR_RNDN)) { mpfr_set(r15295, r15287, MPFR_RNDN); } else { mpfr_set(r15295, r15294, MPFR_RNDN); };
        if (mpfr_get_si(r15269, MPFR_RNDN)) { mpfr_set(r15296, r15275, MPFR_RNDN); } else { mpfr_set(r15296, r15295, MPFR_RNDN); };
        return mpfr_get_d(r15296, MPFR_RNDN);
}

