#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 r15135 = x;
        float r15136 = eps;
        float r15137 = r15135 + r15136;
        float r15138 = cos(r15137);
        float r15139 = cos(r15135);
        float r15140 = r15138 - r15139;
        return r15140;
}

double f_id(double x, double eps) {
        double r15141 = x;
        double r15142 = eps;
        double r15143 = r15141 + r15142;
        double r15144 = cos(r15143);
        double r15145 = cos(r15141);
        double r15146 = r15144 - r15145;
        return r15146;
}


double f_of(float x, float eps) {
        float r15147 = eps;
        float r15148 = -6.450162182147778e-09f;
        bool r15149 = r15147 <= r15148;
        float r15150 = cos(r15147);
        float r15151 = x;
        float r15152 = cos(r15151);
        float r15153 = r15150 * r15152;
        float r15154 = sin(r15147);
        float r15155 = sin(r15151);
        float r15156 = r15154 * r15155;
        float r15157 = r15153 - r15156;
        float r15158 = r15157 * (r15157 * r15157);
        float r15159 = r15152 * (r15152 * r15152);
        float r15160 = r15158 - r15159;
        float r15161 = fma(r15150, r15152, r15152);
        float r15162 = cbrt(r15161);
        float r15163 = r15162 * (r15162 * r15162);
        float r15164 = r15163 - r15156;
        float r15165 = r15152 * r15152;
        float r15166 = fma(r15157, r15164, r15165);
        float r15167 = r15160 / r15166;
        float r15168 = 0.0018547908402979374f;
        bool r15169 = r15147 <= r15168;
        float r15170 = 0.1666666716337204f;
        float r15171 = r15147 * r15170;
        float r15172 = r15151 * (r15151 * r15151);
        float r15173 = r15171 * r15172;
        float r15174 = 0.5f;
        float r15175 = fma(r15174, r15147, r15151);
        float r15176 = r15147 * r15175;
        float r15177 = r15173 - r15176;
        float r15178 = expm1(r15158);
        float r15179 = log1p(r15178);
        float r15180 = r15179 - r15159;
        float r15181 = r15161 - r15156;
        float r15182 = fma(r15157, r15181, r15165);
        float r15183 = r15180 / r15182;
        float r15184 = r15169 ? r15177 : r15183;
        float r15185 = r15149 ? r15167 : r15184;
        return r15185;
}

double f_od(double x, double eps) {
        double r15186 = eps;
        double r15187 = -6.450162182147778e-09;
        bool r15188 = r15186 <= r15187;
        double r15189 = cos(r15186);
        double r15190 = x;
        double r15191 = cos(r15190);
        double r15192 = r15189 * r15191;
        double r15193 = sin(r15186);
        double r15194 = sin(r15190);
        double r15195 = r15193 * r15194;
        double r15196 = r15192 - r15195;
        double r15197 = r15196 * (r15196 * r15196);
        double r15198 = r15191 * (r15191 * r15191);
        double r15199 = r15197 - r15198;
        double r15200 = fma(r15189, r15191, r15191);
        double r15201 = cbrt(r15200);
        double r15202 = r15201 * (r15201 * r15201);
        double r15203 = r15202 - r15195;
        double r15204 = r15191 * r15191;
        double r15205 = fma(r15196, r15203, r15204);
        double r15206 = r15199 / r15205;
        double r15207 = 0.0018547908402979374;
        bool r15208 = r15186 <= r15207;
        double r15209 = 0.1666666716337204;
        double r15210 = r15186 * r15209;
        double r15211 = r15190 * (r15190 * r15190);
        double r15212 = r15210 * r15211;
        double r15213 = 0.5;
        double r15214 = fma(r15213, r15186, r15190);
        double r15215 = r15186 * r15214;
        double r15216 = r15212 - r15215;
        double r15217 = expm1(r15197);
        double r15218 = log1p(r15217);
        double r15219 = r15218 - r15198;
        double r15220 = r15200 - r15195;
        double r15221 = fma(r15196, r15220, r15204);
        double r15222 = r15219 / r15221;
        double r15223 = r15208 ? r15216 : r15222;
        double r15224 = r15188 ? r15206 : r15223;
        return r15224;
}

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 r15225, r15226, r15227, r15228, r15229, r15230;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r15225);
        mpfr_init(r15226);
        mpfr_init(r15227);
        mpfr_init(r15228);
        mpfr_init(r15229);
        mpfr_init(r15230);
}

double f_im(double x, double eps) {
        mpfr_set_d(r15225, x, MPFR_RNDN);
        mpfr_set_d(r15226, eps, MPFR_RNDN);
        mpfr_add(r15227, r15225, r15226, MPFR_RNDN);
        mpfr_cos(r15228, r15227, MPFR_RNDN);
        mpfr_cos(r15229, r15225, MPFR_RNDN);
        mpfr_sub(r15230, r15228, r15229, MPFR_RNDN);
        return mpfr_get_d(r15230, MPFR_RNDN);
}

static mpfr_t r15231, r15232, r15233, r15234, r15235, r15236, 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, r15267, r15268, r15269;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15231);
        mpfr_init_set_str(r15232, "-6.450162f-09", 10, MPFR_RNDN);
        mpfr_init(r15233);
        mpfr_init(r15234);
        mpfr_init(r15235);
        mpfr_init(r15236);
        mpfr_init(r15237);
        mpfr_init(r15238);
        mpfr_init(r15239);
        mpfr_init(r15240);
        mpfr_init(r15241);
        mpfr_init(r15242);
        mpfr_init(r15243);
        mpfr_init(r15244);
        mpfr_init(r15245);
        mpfr_init(r15246);
        mpfr_init(r15247);
        mpfr_init(r15248);
        mpfr_init(r15249);
        mpfr_init(r15250);
        mpfr_init(r15251);
        mpfr_init_set_str(r15252, "0.0018547908f0", 10, MPFR_RNDN);
        mpfr_init(r15253);
        mpfr_init_set_str(r15254, "1/6", 10, MPFR_RNDN);
        mpfr_init(r15255);
        mpfr_init(r15256);
        mpfr_init(r15257);
        mpfr_init_set_str(r15258, "1/2", 10, MPFR_RNDN);
        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);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r15231, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r15233, mpfr_cmp(r15231, r15232) <= 0, MPFR_RNDN);
        mpfr_cos(r15234, r15231, MPFR_RNDN);
        mpfr_set_d(r15235, x, MPFR_RNDN);
        mpfr_cos(r15236, r15235, MPFR_RNDN);
        mpfr_mul(r15237, r15234, r15236, MPFR_RNDN);
        mpfr_sin(r15238, r15231, MPFR_RNDN);
        mpfr_sin(r15239, r15235, MPFR_RNDN);
        mpfr_mul(r15240, r15238, r15239, MPFR_RNDN);
        mpfr_sub(r15241, r15237, r15240, MPFR_RNDN);
        mpfr_mul(r15242, r15241, r15241, MPFR_RNDN); mpfr_mul(r15242, r15242, r15241, MPFR_RNDN);
        mpfr_mul(r15243, r15236, r15236, MPFR_RNDN); mpfr_mul(r15243, r15243, r15236, MPFR_RNDN);
        mpfr_sub(r15244, r15242, r15243, MPFR_RNDN);
        mpfr_fma(r15245, r15234, r15236, r15236, MPFR_RNDN);
        mpfr_cbrt(r15246, r15245, MPFR_RNDN);
        mpfr_mul(r15247, r15246, r15246, MPFR_RNDN); mpfr_mul(r15247, r15247, r15246, MPFR_RNDN);
        mpfr_sub(r15248, r15247, r15240, MPFR_RNDN);
        mpfr_mul(r15249, r15236, r15236, MPFR_RNDN);
        mpfr_fma(r15250, r15241, r15248, r15249, MPFR_RNDN);
        mpfr_div(r15251, r15244, r15250, MPFR_RNDN);
        ;
        mpfr_set_si(r15253, mpfr_cmp(r15231, r15252) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r15255, r15231, r15254, MPFR_RNDN);
        mpfr_mul(r15256, r15235, r15235, MPFR_RNDN); mpfr_mul(r15256, r15256, r15235, MPFR_RNDN);
        mpfr_mul(r15257, r15255, r15256, MPFR_RNDN);
        ;
        mpfr_fma(r15259, r15258, r15231, r15235, MPFR_RNDN);
        mpfr_mul(r15260, r15231, r15259, MPFR_RNDN);
        mpfr_sub(r15261, r15257, r15260, MPFR_RNDN);
        mpfr_expm1(r15262, r15242, MPFR_RNDN);
        mpfr_log1p(r15263, r15262, MPFR_RNDN);
        mpfr_sub(r15264, r15263, r15243, MPFR_RNDN);
        mpfr_sub(r15265, r15245, r15240, MPFR_RNDN);
        mpfr_fma(r15266, r15241, r15265, r15249, MPFR_RNDN);
        mpfr_div(r15267, r15264, r15266, MPFR_RNDN);
        if (mpfr_get_si(r15253, MPFR_RNDN)) { mpfr_set(r15268, r15261, MPFR_RNDN); } else { mpfr_set(r15268, r15267, MPFR_RNDN); };
        if (mpfr_get_si(r15233, MPFR_RNDN)) { mpfr_set(r15269, r15251, MPFR_RNDN); } else { mpfr_set(r15269, r15268, MPFR_RNDN); };
        return mpfr_get_d(r15269, MPFR_RNDN);
}

static mpfr_t 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, r15297, r15298, r15299, r15300, r15301, r15302, r15303, r15304, r15305, r15306, r15307, r15308;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15270);
        mpfr_init_set_str(r15271, "-6.450162f-09", 10, MPFR_RNDN);
        mpfr_init(r15272);
        mpfr_init(r15273);
        mpfr_init(r15274);
        mpfr_init(r15275);
        mpfr_init(r15276);
        mpfr_init(r15277);
        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);
        mpfr_init(r15288);
        mpfr_init(r15289);
        mpfr_init(r15290);
        mpfr_init_set_str(r15291, "0.0018547908f0", 10, MPFR_RNDN);
        mpfr_init(r15292);
        mpfr_init_set_str(r15293, "1/6", 10, MPFR_RNDN);
        mpfr_init(r15294);
        mpfr_init(r15295);
        mpfr_init(r15296);
        mpfr_init_set_str(r15297, "1/2", 10, MPFR_RNDN);
        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);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r15270, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r15272, mpfr_cmp(r15270, r15271) <= 0, MPFR_RNDN);
        mpfr_cos(r15273, r15270, MPFR_RNDN);
        mpfr_set_d(r15274, x, MPFR_RNDN);
        mpfr_cos(r15275, r15274, MPFR_RNDN);
        mpfr_mul(r15276, r15273, r15275, MPFR_RNDN);
        mpfr_sin(r15277, r15270, MPFR_RNDN);
        mpfr_sin(r15278, r15274, MPFR_RNDN);
        mpfr_mul(r15279, r15277, r15278, MPFR_RNDN);
        mpfr_sub(r15280, r15276, r15279, MPFR_RNDN);
        mpfr_mul(r15281, r15280, r15280, MPFR_RNDN); mpfr_mul(r15281, r15281, r15280, MPFR_RNDN);
        mpfr_mul(r15282, r15275, r15275, MPFR_RNDN); mpfr_mul(r15282, r15282, r15275, MPFR_RNDN);
        mpfr_sub(r15283, r15281, r15282, MPFR_RNDN);
        mpfr_fma(r15284, r15273, r15275, r15275, MPFR_RNDN);
        mpfr_cbrt(r15285, r15284, MPFR_RNDN);
        mpfr_mul(r15286, r15285, r15285, MPFR_RNDN); mpfr_mul(r15286, r15286, r15285, MPFR_RNDN);
        mpfr_sub(r15287, r15286, r15279, MPFR_RNDN);
        mpfr_mul(r15288, r15275, r15275, MPFR_RNDN);
        mpfr_fma(r15289, r15280, r15287, r15288, MPFR_RNDN);
        mpfr_div(r15290, r15283, r15289, MPFR_RNDN);
        ;
        mpfr_set_si(r15292, mpfr_cmp(r15270, r15291) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r15294, r15270, r15293, MPFR_RNDN);
        mpfr_mul(r15295, r15274, r15274, MPFR_RNDN); mpfr_mul(r15295, r15295, r15274, MPFR_RNDN);
        mpfr_mul(r15296, r15294, r15295, MPFR_RNDN);
        ;
        mpfr_fma(r15298, r15297, r15270, r15274, MPFR_RNDN);
        mpfr_mul(r15299, r15270, r15298, MPFR_RNDN);
        mpfr_sub(r15300, r15296, r15299, MPFR_RNDN);
        mpfr_expm1(r15301, r15281, MPFR_RNDN);
        mpfr_log1p(r15302, r15301, MPFR_RNDN);
        mpfr_sub(r15303, r15302, r15282, MPFR_RNDN);
        mpfr_sub(r15304, r15284, r15279, MPFR_RNDN);
        mpfr_fma(r15305, r15280, r15304, r15288, MPFR_RNDN);
        mpfr_div(r15306, r15303, r15305, MPFR_RNDN);
        if (mpfr_get_si(r15292, MPFR_RNDN)) { mpfr_set(r15307, r15300, MPFR_RNDN); } else { mpfr_set(r15307, r15306, MPFR_RNDN); };
        if (mpfr_get_si(r15272, MPFR_RNDN)) { mpfr_set(r15308, r15290, MPFR_RNDN); } else { mpfr_set(r15308, r15307, MPFR_RNDN); };
        return mpfr_get_d(r15308, MPFR_RNDN);
}

