#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 r15171 = 1.0f;
        float r15172 = x;
        float r15173 = cos(r15172);
        float r15174 = r15171 - r15173;
        float r15175 = r15172 * r15172;
        float r15176 = r15174 / r15175;
        return r15176;
}

double f_id(double x) {
        double r15177 = 1.0;
        double r15178 = x;
        double r15179 = cos(r15178);
        double r15180 = r15177 - r15179;
        double r15181 = r15178 * r15178;
        double r15182 = r15180 / r15181;
        return r15182;
}


double f_of(float x) {
        float r15183 = x;
        float r15184 = -0.2356608510017395f;
        bool r15185 = r15183 <= r15184;
        float r15186 = 1.0f;
        float r15187 = r15186 / r15183;
        float r15188 = cos(r15183);
        float r15189 = r15186 - r15188;
        float r15190 = r15189 / r15183;
        float r15191 = r15187 * r15190;
        float r15192 = 0.5589792728424072f;
        bool r15193 = r15183 <= r15192;
        float r15194 = 0.0013888889225199819f;
        float r15195 = 4.0f;
        float r15196 = pow(r15183, r15195);
        float r15197 = r15194 * r15196;
        float r15198 = 0.5f;
        float r15199 = r15197 + r15198;
        float r15200 = 0.0416666679084301f;
        float r15201 = r15183 * r15183;
        float r15202 = r15200 * r15201;
        float r15203 = r15199 - r15202;
        float r15204 = sin(r15183);
        float r15205 = r15204 * r15204;
        float r15206 = r15186 + r15188;
        float r15207 = r15205 / r15206;
        float r15208 = sqrt(r15207);
        float r15209 = r15208 / r15183;
        float r15210 = r15209 * r15209;
        float r15211 = r15193 ? r15203 : r15210;
        float r15212 = r15185 ? r15191 : r15211;
        return r15212;
}

double f_od(double x) {
        double r15213 = x;
        double r15214 = -0.2356608510017395;
        bool r15215 = r15213 <= r15214;
        double r15216 = 1.0;
        double r15217 = r15216 / r15213;
        double r15218 = cos(r15213);
        double r15219 = r15216 - r15218;
        double r15220 = r15219 / r15213;
        double r15221 = r15217 * r15220;
        double r15222 = 0.5589792728424072;
        bool r15223 = r15213 <= r15222;
        double r15224 = 0.0013888889225199819;
        double r15225 = 4.0;
        double r15226 = pow(r15213, r15225);
        double r15227 = r15224 * r15226;
        double r15228 = 0.5;
        double r15229 = r15227 + r15228;
        double r15230 = 0.0416666679084301;
        double r15231 = r15213 * r15213;
        double r15232 = r15230 * r15231;
        double r15233 = r15229 - r15232;
        double r15234 = sin(r15213);
        double r15235 = r15234 * r15234;
        double r15236 = r15216 + r15218;
        double r15237 = r15235 / r15236;
        double r15238 = sqrt(r15237);
        double r15239 = r15238 / r15213;
        double r15240 = r15239 * r15239;
        double r15241 = r15223 ? r15233 : r15240;
        double r15242 = r15215 ? r15221 : r15241;
        return r15242;
}

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 r15243, r15244, r15245, r15246, r15247, r15248;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r15243, "1", 10, MPFR_RNDN);
        mpfr_init(r15244);
        mpfr_init(r15245);
        mpfr_init(r15246);
        mpfr_init(r15247);
        mpfr_init(r15248);
}

double f_im(double x) {
        ;
        mpfr_set_d(r15244, x, MPFR_RNDN);
        mpfr_cos(r15245, r15244, MPFR_RNDN);
        mpfr_sub(r15246, r15243, r15245, MPFR_RNDN);
        mpfr_sqr(r15247, r15244, MPFR_RNDN);
        mpfr_div(r15248, r15246, r15247, MPFR_RNDN);
        return mpfr_get_d(r15248, MPFR_RNDN);
}

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

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15249);
        mpfr_init_set_str(r15250, "-0.23566085f0", 10, MPFR_RNDN);
        mpfr_init(r15251);
        mpfr_init_set_str(r15252, "1", 10, MPFR_RNDN);
        mpfr_init(r15253);
        mpfr_init(r15254);
        mpfr_init(r15255);
        mpfr_init(r15256);
        mpfr_init(r15257);
        mpfr_init_set_str(r15258, "0.5589793f0", 10, MPFR_RNDN);
        mpfr_init(r15259);
        mpfr_init_set_str(r15260, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r15261, "4", 10, MPFR_RNDN);
        mpfr_init(r15262);
        mpfr_init(r15263);
        mpfr_init_set_str(r15264, "1/2", 10, MPFR_RNDN);
        mpfr_init(r15265);
        mpfr_init_set_str(r15266, "1/24", 10, MPFR_RNDN);
        mpfr_init(r15267);
        mpfr_init(r15268);
        mpfr_init(r15269);
        mpfr_init(r15270);
        mpfr_init(r15271);
        mpfr_init(r15272);
        mpfr_init(r15273);
        mpfr_init(r15274);
        mpfr_init(r15275);
        mpfr_init(r15276);
        mpfr_init(r15277);
        mpfr_init(r15278);
}

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

static mpfr_t 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(r15279);
        mpfr_init_set_str(r15280, "-0.23566085f0", 10, MPFR_RNDN);
        mpfr_init(r15281);
        mpfr_init_set_str(r15282, "1", 10, MPFR_RNDN);
        mpfr_init(r15283);
        mpfr_init(r15284);
        mpfr_init(r15285);
        mpfr_init(r15286);
        mpfr_init(r15287);
        mpfr_init_set_str(r15288, "0.5589793f0", 10, MPFR_RNDN);
        mpfr_init(r15289);
        mpfr_init_set_str(r15290, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r15291, "4", 10, MPFR_RNDN);
        mpfr_init(r15292);
        mpfr_init(r15293);
        mpfr_init_set_str(r15294, "1/2", 10, MPFR_RNDN);
        mpfr_init(r15295);
        mpfr_init_set_str(r15296, "1/24", 10, MPFR_RNDN);
        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);
}

double f_dm(double x) {
        mpfr_set_d(r15279, x, MPFR_RNDN);
        ;
        mpfr_set_si(r15281, mpfr_cmp(r15279, r15280) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r15283, r15282, r15279, MPFR_RNDN);
        mpfr_cos(r15284, r15279, MPFR_RNDN);
        mpfr_sub(r15285, r15282, r15284, MPFR_RNDN);
        mpfr_div(r15286, r15285, r15279, MPFR_RNDN);
        mpfr_mul(r15287, r15283, r15286, MPFR_RNDN);
        ;
        mpfr_set_si(r15289, mpfr_cmp(r15279, r15288) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r15292, r15279, r15291, MPFR_RNDN);
        mpfr_mul(r15293, r15290, r15292, MPFR_RNDN);
        ;
        mpfr_add(r15295, r15293, r15294, MPFR_RNDN);
        ;
        mpfr_sqr(r15297, r15279, MPFR_RNDN);
        mpfr_mul(r15298, r15296, r15297, MPFR_RNDN);
        mpfr_sub(r15299, r15295, r15298, MPFR_RNDN);
        mpfr_sin(r15300, r15279, MPFR_RNDN);
        mpfr_sqr(r15301, r15300, MPFR_RNDN);
        mpfr_add(r15302, r15282, r15284, MPFR_RNDN);
        mpfr_div(r15303, r15301, r15302, MPFR_RNDN);
        mpfr_sqrt(r15304, r15303, MPFR_RNDN);
        mpfr_div(r15305, r15304, r15279, MPFR_RNDN);
        mpfr_sqr(r15306, r15305, MPFR_RNDN);
        if (mpfr_get_si(r15289, MPFR_RNDN)) { mpfr_set(r15307, r15299, MPFR_RNDN); } else { mpfr_set(r15307, r15306, MPFR_RNDN); };
        if (mpfr_get_si(r15281, MPFR_RNDN)) { mpfr_set(r15308, r15287, MPFR_RNDN); } else { mpfr_set(r15308, r15307, MPFR_RNDN); };
        return mpfr_get_d(r15308, MPFR_RNDN);
}

