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

char *name = "NMSE problem 3.3.5";

double f_if(float x, float eps) {
        float r15147 = x;
        float r15148 = eps;
        float r15149 = r15147 + r15148;
        float r15150 = cos(r15149);
        float r15151 = cos(r15147);
        float r15152 = r15150 - r15151;
        return r15152;
}

double f_id(double x, double eps) {
        double r15153 = x;
        double r15154 = eps;
        double r15155 = r15153 + r15154;
        double r15156 = cos(r15155);
        double r15157 = cos(r15153);
        double r15158 = r15156 - r15157;
        return r15158;
}


double f_of(float x, float eps) {
        float r15159 = eps;
        float r15160 = -2.3200359819050553e-13f;
        bool r15161 = r15159 <= r15160;
        float r15162 = cos(r15159);
        float r15163 = x;
        float r15164 = cos(r15163);
        float r15165 = r15162 * r15164;
        float r15166 = r15165 * (r15165 * r15165);
        float r15167 = sin(r15163);
        float r15168 = sin(r15159);
        float r15169 = r15167 * r15168;
        float r15170 = r15169 * (r15169 * r15169);
        float r15171 = r15166 - r15170;
        float r15172 = r15164 * r15162;
        float r15173 = r15172 * r15172;
        float r15174 = r15169 * r15169;
        float r15175 = r15172 * r15169;
        float r15176 = r15174 + r15175;
        float r15177 = r15173 + r15176;
        float r15178 = r15171 / r15177;
        float r15179 = r15178 - r15164;
        float r15180 = r15179 * (r15179 * r15179);
        float r15181 = cbrt(r15180);
        float r15182 = 0.18811941146850586f;
        bool r15183 = r15159 <= r15182;
        float r15184 = 0.0416666679084301f;
        float r15185 = 4.0f;
        float r15186 = pow(r15159, r15185);
        float r15187 = r15184 * r15186;
        float r15188 = r15159 * r15159;
        float r15189 = 0.5f;
        float r15190 = r15163 * r15159;
        float r15191 = fma(r15188, r15189, r15190);
        float r15192 = r15187 - r15191;
        float r15193 = r15173 * (r15173 * r15173);
        float r15194 = cbrt(r15193);
        float r15195 = r15194 + r15176;
        float r15196 = r15171 / r15195;
        float r15197 = r15196 - r15164;
        float r15198 = r15183 ? r15192 : r15197;
        float r15199 = r15161 ? r15181 : r15198;
        return r15199;
}

double f_od(double x, double eps) {
        double r15200 = eps;
        double r15201 = -2.3200359819050553e-13;
        bool r15202 = r15200 <= r15201;
        double r15203 = cos(r15200);
        double r15204 = x;
        double r15205 = cos(r15204);
        double r15206 = r15203 * r15205;
        double r15207 = r15206 * (r15206 * r15206);
        double r15208 = sin(r15204);
        double r15209 = sin(r15200);
        double r15210 = r15208 * r15209;
        double r15211 = r15210 * (r15210 * r15210);
        double r15212 = r15207 - r15211;
        double r15213 = r15205 * r15203;
        double r15214 = r15213 * r15213;
        double r15215 = r15210 * r15210;
        double r15216 = r15213 * r15210;
        double r15217 = r15215 + r15216;
        double r15218 = r15214 + r15217;
        double r15219 = r15212 / r15218;
        double r15220 = r15219 - r15205;
        double r15221 = r15220 * (r15220 * r15220);
        double r15222 = cbrt(r15221);
        double r15223 = 0.18811941146850586;
        bool r15224 = r15200 <= r15223;
        double r15225 = 0.0416666679084301;
        double r15226 = 4.0;
        double r15227 = pow(r15200, r15226);
        double r15228 = r15225 * r15227;
        double r15229 = r15200 * r15200;
        double r15230 = 0.5;
        double r15231 = r15204 * r15200;
        double r15232 = fma(r15229, r15230, r15231);
        double r15233 = r15228 - r15232;
        double r15234 = r15214 * (r15214 * r15214);
        double r15235 = cbrt(r15234);
        double r15236 = r15235 + r15217;
        double r15237 = r15212 / r15236;
        double r15238 = r15237 - r15205;
        double r15239 = r15224 ? r15233 : r15238;
        double r15240 = r15202 ? r15222 : r15239;
        return r15240;
}

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 r15241, r15242, r15243, r15244, r15245, r15246;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r15241);
        mpfr_init(r15242);
        mpfr_init(r15243);
        mpfr_init(r15244);
        mpfr_init(r15245);
        mpfr_init(r15246);
}

double f_im(double x, double eps) {
        mpfr_set_d(r15241, x, MPFR_RNDN);
        mpfr_set_d(r15242, eps, MPFR_RNDN);
        mpfr_add(r15243, r15241, r15242, MPFR_RNDN);
        mpfr_cos(r15244, r15243, MPFR_RNDN);
        mpfr_cos(r15245, r15241, MPFR_RNDN);
        mpfr_sub(r15246, r15244, r15245, MPFR_RNDN);
        return mpfr_get_d(r15246, MPFR_RNDN);
}

static mpfr_t r15247, r15248, r15249, r15250, r15251, r15252, r15253, r15254, r15255, r15256, r15257, r15258, r15259, r15260, r15261, r15262, r15263, r15264, r15265, r15266, r15267, r15268, r15269, r15270, r15271, r15272, r15273, r15274, r15275, r15276, r15277, r15278, r15279, r15280, r15281, r15282, r15283, r15284, r15285, r15286, r15287;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15247);
        mpfr_init_set_str(r15248, "-2.320036f-13", 10, MPFR_RNDN);
        mpfr_init(r15249);
        mpfr_init(r15250);
        mpfr_init(r15251);
        mpfr_init(r15252);
        mpfr_init(r15253);
        mpfr_init(r15254);
        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);
        mpfr_init(r15267);
        mpfr_init(r15268);
        mpfr_init(r15269);
        mpfr_init_set_str(r15270, "0.18811941f0", 10, MPFR_RNDN);
        mpfr_init(r15271);
        mpfr_init_set_str(r15272, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r15273, "4", 10, MPFR_RNDN);
        mpfr_init(r15274);
        mpfr_init(r15275);
        mpfr_init(r15276);
        mpfr_init_set_str(r15277, "1/2", 10, MPFR_RNDN);
        mpfr_init(r15278);
        mpfr_init(r15279);
        mpfr_init(r15280);
        mpfr_init(r15281);
        mpfr_init(r15282);
        mpfr_init(r15283);
        mpfr_init(r15284);
        mpfr_init(r15285);
        mpfr_init(r15286);
        mpfr_init(r15287);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r15247, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r15249, mpfr_cmp(r15247, r15248) <= 0, MPFR_RNDN);
        mpfr_cos(r15250, r15247, MPFR_RNDN);
        mpfr_set_d(r15251, x, MPFR_RNDN);
        mpfr_cos(r15252, r15251, MPFR_RNDN);
        mpfr_mul(r15253, r15250, r15252, MPFR_RNDN);
        mpfr_mul(r15254, r15253, r15253, MPFR_RNDN); mpfr_mul(r15254, r15254, r15253, MPFR_RNDN);
        mpfr_sin(r15255, r15251, MPFR_RNDN);
        mpfr_sin(r15256, r15247, MPFR_RNDN);
        mpfr_mul(r15257, r15255, r15256, MPFR_RNDN);
        mpfr_mul(r15258, r15257, r15257, MPFR_RNDN); mpfr_mul(r15258, r15258, r15257, MPFR_RNDN);
        mpfr_sub(r15259, r15254, r15258, MPFR_RNDN);
        mpfr_mul(r15260, r15252, r15250, MPFR_RNDN);
        mpfr_sqr(r15261, r15260, MPFR_RNDN);
        mpfr_sqr(r15262, r15257, MPFR_RNDN);
        mpfr_mul(r15263, r15260, r15257, MPFR_RNDN);
        mpfr_add(r15264, r15262, r15263, MPFR_RNDN);
        mpfr_add(r15265, r15261, r15264, MPFR_RNDN);
        mpfr_div(r15266, r15259, r15265, MPFR_RNDN);
        mpfr_sub(r15267, r15266, r15252, MPFR_RNDN);
        mpfr_mul(r15268, r15267, r15267, MPFR_RNDN); mpfr_mul(r15268, r15268, r15267, MPFR_RNDN);
        mpfr_cbrt(r15269, r15268, MPFR_RNDN);
        ;
        mpfr_set_si(r15271, mpfr_cmp(r15247, r15270) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r15274, r15247, r15273, MPFR_RNDN);
        mpfr_mul(r15275, r15272, r15274, MPFR_RNDN);
        mpfr_mul(r15276, r15247, r15247, MPFR_RNDN);
        ;
        mpfr_mul(r15278, r15251, r15247, MPFR_RNDN);
        mpfr_fma(r15279, r15276, r15277, r15278, MPFR_RNDN);
        mpfr_sub(r15280, r15275, r15279, MPFR_RNDN);
        mpfr_mul(r15281, r15261, r15261, MPFR_RNDN); mpfr_mul(r15281, r15281, r15261, MPFR_RNDN);
        mpfr_cbrt(r15282, r15281, MPFR_RNDN);
        mpfr_add(r15283, r15282, r15264, MPFR_RNDN);
        mpfr_div(r15284, r15259, r15283, MPFR_RNDN);
        mpfr_sub(r15285, r15284, r15252, MPFR_RNDN);
        if (mpfr_get_si(r15271, MPFR_RNDN)) { mpfr_set(r15286, r15280, MPFR_RNDN); } else { mpfr_set(r15286, r15285, MPFR_RNDN); };
        if (mpfr_get_si(r15249, MPFR_RNDN)) { mpfr_set(r15287, r15269, MPFR_RNDN); } else { mpfr_set(r15287, r15286, MPFR_RNDN); };
        return mpfr_get_d(r15287, MPFR_RNDN);
}

static mpfr_t r15288, r15289, r15290, r15291, r15292, r15293, r15294, r15295, r15296, r15297, r15298, r15299, r15300, r15301, r15302, r15303, r15304, r15305, r15306, r15307, r15308, r15309, r15310, r15311, r15312, r15313, r15314, r15315, r15316, r15317, r15318, r15319, r15320, r15321, r15322, r15323, r15324, r15325, r15326, r15327, r15328;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15288);
        mpfr_init_set_str(r15289, "-2.320036f-13", 10, MPFR_RNDN);
        mpfr_init(r15290);
        mpfr_init(r15291);
        mpfr_init(r15292);
        mpfr_init(r15293);
        mpfr_init(r15294);
        mpfr_init(r15295);
        mpfr_init(r15296);
        mpfr_init(r15297);
        mpfr_init(r15298);
        mpfr_init(r15299);
        mpfr_init(r15300);
        mpfr_init(r15301);
        mpfr_init(r15302);
        mpfr_init(r15303);
        mpfr_init(r15304);
        mpfr_init(r15305);
        mpfr_init(r15306);
        mpfr_init(r15307);
        mpfr_init(r15308);
        mpfr_init(r15309);
        mpfr_init(r15310);
        mpfr_init_set_str(r15311, "0.18811941f0", 10, MPFR_RNDN);
        mpfr_init(r15312);
        mpfr_init_set_str(r15313, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r15314, "4", 10, MPFR_RNDN);
        mpfr_init(r15315);
        mpfr_init(r15316);
        mpfr_init(r15317);
        mpfr_init_set_str(r15318, "1/2", 10, MPFR_RNDN);
        mpfr_init(r15319);
        mpfr_init(r15320);
        mpfr_init(r15321);
        mpfr_init(r15322);
        mpfr_init(r15323);
        mpfr_init(r15324);
        mpfr_init(r15325);
        mpfr_init(r15326);
        mpfr_init(r15327);
        mpfr_init(r15328);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r15288, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r15290, mpfr_cmp(r15288, r15289) <= 0, MPFR_RNDN);
        mpfr_cos(r15291, r15288, MPFR_RNDN);
        mpfr_set_d(r15292, x, MPFR_RNDN);
        mpfr_cos(r15293, r15292, MPFR_RNDN);
        mpfr_mul(r15294, r15291, r15293, MPFR_RNDN);
        mpfr_mul(r15295, r15294, r15294, MPFR_RNDN); mpfr_mul(r15295, r15295, r15294, MPFR_RNDN);
        mpfr_sin(r15296, r15292, MPFR_RNDN);
        mpfr_sin(r15297, r15288, MPFR_RNDN);
        mpfr_mul(r15298, r15296, r15297, MPFR_RNDN);
        mpfr_mul(r15299, r15298, r15298, MPFR_RNDN); mpfr_mul(r15299, r15299, r15298, MPFR_RNDN);
        mpfr_sub(r15300, r15295, r15299, MPFR_RNDN);
        mpfr_mul(r15301, r15293, r15291, MPFR_RNDN);
        mpfr_sqr(r15302, r15301, MPFR_RNDN);
        mpfr_sqr(r15303, r15298, MPFR_RNDN);
        mpfr_mul(r15304, r15301, r15298, MPFR_RNDN);
        mpfr_add(r15305, r15303, r15304, MPFR_RNDN);
        mpfr_add(r15306, r15302, r15305, MPFR_RNDN);
        mpfr_div(r15307, r15300, r15306, MPFR_RNDN);
        mpfr_sub(r15308, r15307, r15293, MPFR_RNDN);
        mpfr_mul(r15309, r15308, r15308, MPFR_RNDN); mpfr_mul(r15309, r15309, r15308, MPFR_RNDN);
        mpfr_cbrt(r15310, r15309, MPFR_RNDN);
        ;
        mpfr_set_si(r15312, mpfr_cmp(r15288, r15311) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r15315, r15288, r15314, MPFR_RNDN);
        mpfr_mul(r15316, r15313, r15315, MPFR_RNDN);
        mpfr_mul(r15317, r15288, r15288, MPFR_RNDN);
        ;
        mpfr_mul(r15319, r15292, r15288, MPFR_RNDN);
        mpfr_fma(r15320, r15317, r15318, r15319, MPFR_RNDN);
        mpfr_sub(r15321, r15316, r15320, MPFR_RNDN);
        mpfr_mul(r15322, r15302, r15302, MPFR_RNDN); mpfr_mul(r15322, r15322, r15302, MPFR_RNDN);
        mpfr_cbrt(r15323, r15322, MPFR_RNDN);
        mpfr_add(r15324, r15323, r15305, MPFR_RNDN);
        mpfr_div(r15325, r15300, r15324, MPFR_RNDN);
        mpfr_sub(r15326, r15325, r15293, MPFR_RNDN);
        if (mpfr_get_si(r15312, MPFR_RNDN)) { mpfr_set(r15327, r15321, MPFR_RNDN); } else { mpfr_set(r15327, r15326, MPFR_RNDN); };
        if (mpfr_get_si(r15290, MPFR_RNDN)) { mpfr_set(r15328, r15310, MPFR_RNDN); } else { mpfr_set(r15328, r15327, MPFR_RNDN); };
        return mpfr_get_d(r15328, MPFR_RNDN);
}

