#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 r15127 = x;
        float r15128 = eps;
        float r15129 = r15127 + r15128;
        float r15130 = cos(r15129);
        float r15131 = cos(r15127);
        float r15132 = r15130 - r15131;
        return r15132;
}

double f_id(double x, double eps) {
        double r15133 = x;
        double r15134 = eps;
        double r15135 = r15133 + r15134;
        double r15136 = cos(r15135);
        double r15137 = cos(r15133);
        double r15138 = r15136 - r15137;
        return r15138;
}


double f_of(float x, float eps) {
        float r15139 = eps;
        float r15140 = -0.0026148799806833267f;
        bool r15141 = r15139 <= r15140;
        float r15142 = x;
        float r15143 = cos(r15142);
        float r15144 = r15143 * (r15143 * r15143);
        float r15145 = cos(r15139);
        float r15146 = r15145 * (r15145 * r15145);
        float r15147 = r15144 * r15146;
        float r15148 = cbrt(r15147);
        float r15149 = sin(r15142);
        float r15150 = sin(r15139);
        float r15151 = r15149 * r15150;
        float r15152 = r15148 - r15151;
        float r15153 = r15152 - r15143;
        float r15154 = 0.25760501623153687f;
        bool r15155 = r15139 <= r15154;
        float r15156 = r15139 * (r15139 * r15139);
        float r15157 = 0.1666666716337204f;
        float r15158 = r15157 * r15149;
        float r15159 = r15156 * r15158;
        float r15160 = 0.5f;
        float r15161 = fma(r15160, r15139, r15149);
        float r15162 = r15139 * r15161;
        float r15163 = r15159 - r15162;
        float r15164 = r15143 * r15145;
        float r15165 = r15164 - r15151;
        float r15166 = r15165 * r15165;
        float r15167 = r15143 * r15143;
        float r15168 = r15166 - r15167;
        float r15169 = fma(r15145, r15143, r15143);
        float r15170 = r15150 * r15149;
        float r15171 = r15169 - r15170;
        float r15172 = r15168 / r15171;
        float r15173 = r15155 ? r15163 : r15172;
        float r15174 = r15141 ? r15153 : r15173;
        return r15174;
}

double f_od(double x, double eps) {
        double r15175 = eps;
        double r15176 = -0.0026148799806833267;
        bool r15177 = r15175 <= r15176;
        double r15178 = x;
        double r15179 = cos(r15178);
        double r15180 = r15179 * (r15179 * r15179);
        double r15181 = cos(r15175);
        double r15182 = r15181 * (r15181 * r15181);
        double r15183 = r15180 * r15182;
        double r15184 = cbrt(r15183);
        double r15185 = sin(r15178);
        double r15186 = sin(r15175);
        double r15187 = r15185 * r15186;
        double r15188 = r15184 - r15187;
        double r15189 = r15188 - r15179;
        double r15190 = 0.25760501623153687;
        bool r15191 = r15175 <= r15190;
        double r15192 = r15175 * (r15175 * r15175);
        double r15193 = 0.1666666716337204;
        double r15194 = r15193 * r15185;
        double r15195 = r15192 * r15194;
        double r15196 = 0.5;
        double r15197 = fma(r15196, r15175, r15185);
        double r15198 = r15175 * r15197;
        double r15199 = r15195 - r15198;
        double r15200 = r15179 * r15181;
        double r15201 = r15200 - r15187;
        double r15202 = r15201 * r15201;
        double r15203 = r15179 * r15179;
        double r15204 = r15202 - r15203;
        double r15205 = fma(r15181, r15179, r15179);
        double r15206 = r15186 * r15185;
        double r15207 = r15205 - r15206;
        double r15208 = r15204 / r15207;
        double r15209 = r15191 ? r15199 : r15208;
        double r15210 = r15177 ? r15189 : r15209;
        return r15210;
}

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 r15211, r15212, r15213, r15214, r15215, r15216;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r15211);
        mpfr_init(r15212);
        mpfr_init(r15213);
        mpfr_init(r15214);
        mpfr_init(r15215);
        mpfr_init(r15216);
}

double f_im(double x, double eps) {
        mpfr_set_d(r15211, x, MPFR_RNDN);
        mpfr_set_d(r15212, eps, MPFR_RNDN);
        mpfr_add(r15213, r15211, r15212, MPFR_RNDN);
        mpfr_cos(r15214, r15213, MPFR_RNDN);
        mpfr_cos(r15215, r15211, MPFR_RNDN);
        mpfr_sub(r15216, r15214, r15215, MPFR_RNDN);
        return mpfr_get_d(r15216, MPFR_RNDN);
}

static mpfr_t r15217, r15218, r15219, r15220, r15221, r15222, r15223, r15224, r15225, r15226, r15227, r15228, r15229, r15230, r15231, r15232, r15233, r15234, r15235, r15236, r15237, r15238, r15239, r15240, r15241, r15242, r15243, r15244, r15245, r15246, r15247, r15248, r15249, r15250, r15251, r15252;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15217);
        mpfr_init_set_str(r15218, "-0.00261488f0", 10, MPFR_RNDN);
        mpfr_init(r15219);
        mpfr_init(r15220);
        mpfr_init(r15221);
        mpfr_init(r15222);
        mpfr_init(r15223);
        mpfr_init(r15224);
        mpfr_init(r15225);
        mpfr_init(r15226);
        mpfr_init(r15227);
        mpfr_init(r15228);
        mpfr_init(r15229);
        mpfr_init(r15230);
        mpfr_init(r15231);
        mpfr_init_set_str(r15232, "0.25760502f0", 10, MPFR_RNDN);
        mpfr_init(r15233);
        mpfr_init(r15234);
        mpfr_init_set_str(r15235, "1/6", 10, MPFR_RNDN);
        mpfr_init(r15236);
        mpfr_init(r15237);
        mpfr_init_set_str(r15238, "1/2", 10, MPFR_RNDN);
        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(r15252);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r15217, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r15219, mpfr_cmp(r15217, r15218) <= 0, MPFR_RNDN);
        mpfr_set_d(r15220, x, MPFR_RNDN);
        mpfr_cos(r15221, r15220, MPFR_RNDN);
        mpfr_mul(r15222, r15221, r15221, MPFR_RNDN); mpfr_mul(r15222, r15222, r15221, MPFR_RNDN);
        mpfr_cos(r15223, r15217, MPFR_RNDN);
        mpfr_mul(r15224, r15223, r15223, MPFR_RNDN); mpfr_mul(r15224, r15224, r15223, MPFR_RNDN);
        mpfr_mul(r15225, r15222, r15224, MPFR_RNDN);
        mpfr_cbrt(r15226, r15225, MPFR_RNDN);
        mpfr_sin(r15227, r15220, MPFR_RNDN);
        mpfr_sin(r15228, r15217, MPFR_RNDN);
        mpfr_mul(r15229, r15227, r15228, MPFR_RNDN);
        mpfr_sub(r15230, r15226, r15229, MPFR_RNDN);
        mpfr_sub(r15231, r15230, r15221, MPFR_RNDN);
        ;
        mpfr_set_si(r15233, mpfr_cmp(r15217, r15232) <= 0, MPFR_RNDN);
        mpfr_mul(r15234, r15217, r15217, MPFR_RNDN); mpfr_mul(r15234, r15234, r15217, MPFR_RNDN);
        ;
        mpfr_mul(r15236, r15235, r15227, MPFR_RNDN);
        mpfr_mul(r15237, r15234, r15236, MPFR_RNDN);
        ;
        mpfr_fma(r15239, r15238, r15217, r15227, MPFR_RNDN);
        mpfr_mul(r15240, r15217, r15239, MPFR_RNDN);
        mpfr_sub(r15241, r15237, r15240, MPFR_RNDN);
        mpfr_mul(r15242, r15221, r15223, MPFR_RNDN);
        mpfr_sub(r15243, r15242, r15229, MPFR_RNDN);
        mpfr_sqr(r15244, r15243, MPFR_RNDN);
        mpfr_sqr(r15245, r15221, MPFR_RNDN);
        mpfr_sub(r15246, r15244, r15245, MPFR_RNDN);
        mpfr_fma(r15247, r15223, r15221, r15221, MPFR_RNDN);
        mpfr_mul(r15248, r15228, r15227, MPFR_RNDN);
        mpfr_sub(r15249, r15247, r15248, MPFR_RNDN);
        mpfr_div(r15250, r15246, r15249, MPFR_RNDN);
        if (mpfr_get_si(r15233, MPFR_RNDN)) { mpfr_set(r15251, r15241, MPFR_RNDN); } else { mpfr_set(r15251, r15250, MPFR_RNDN); };
        if (mpfr_get_si(r15219, MPFR_RNDN)) { mpfr_set(r15252, r15231, MPFR_RNDN); } else { mpfr_set(r15252, r15251, MPFR_RNDN); };
        return mpfr_get_d(r15252, MPFR_RNDN);
}

static mpfr_t 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, r15288;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15253);
        mpfr_init_set_str(r15254, "-0.00261488f0", 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);
        mpfr_init(r15267);
        mpfr_init_set_str(r15268, "0.25760502f0", 10, MPFR_RNDN);
        mpfr_init(r15269);
        mpfr_init(r15270);
        mpfr_init_set_str(r15271, "1/6", 10, MPFR_RNDN);
        mpfr_init(r15272);
        mpfr_init(r15273);
        mpfr_init_set_str(r15274, "1/2", 10, MPFR_RNDN);
        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);
}

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

