#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 r15163 = 1.0f;
        float r15164 = x;
        float r15165 = cos(r15164);
        float r15166 = r15163 - r15165;
        float r15167 = r15164 * r15164;
        float r15168 = r15166 / r15167;
        return r15168;
}

double f_id(double x) {
        double r15169 = 1.0;
        double r15170 = x;
        double r15171 = cos(r15170);
        double r15172 = r15169 - r15171;
        double r15173 = r15170 * r15170;
        double r15174 = r15172 / r15173;
        return r15174;
}


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

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

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 r15235, r15236, r15237, r15238, r15239, r15240;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r15235, "1", 10, MPFR_RNDN);
        mpfr_init(r15236);
        mpfr_init(r15237);
        mpfr_init(r15238);
        mpfr_init(r15239);
        mpfr_init(r15240);
}

double f_im(double x) {
        ;
        mpfr_set_d(r15236, x, MPFR_RNDN);
        mpfr_cos(r15237, r15236, MPFR_RNDN);
        mpfr_sub(r15238, r15235, r15237, MPFR_RNDN);
        mpfr_sqr(r15239, r15236, MPFR_RNDN);
        mpfr_div(r15240, r15238, r15239, MPFR_RNDN);
        return mpfr_get_d(r15240, MPFR_RNDN);
}

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

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15241);
        mpfr_init_set_str(r15242, "-0.23566085f0", 10, MPFR_RNDN);
        mpfr_init(r15243);
        mpfr_init_set_str(r15244, "1", 10, MPFR_RNDN);
        mpfr_init(r15245);
        mpfr_init(r15246);
        mpfr_init(r15247);
        mpfr_init(r15248);
        mpfr_init(r15249);
        mpfr_init_set_str(r15250, "0.5589793f0", 10, MPFR_RNDN);
        mpfr_init(r15251);
        mpfr_init_set_str(r15252, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r15253, "4", 10, MPFR_RNDN);
        mpfr_init(r15254);
        mpfr_init(r15255);
        mpfr_init_set_str(r15256, "1/2", 10, MPFR_RNDN);
        mpfr_init(r15257);
        mpfr_init_set_str(r15258, "1/24", 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);
        mpfr_init(r15270);
}

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

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

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15271);
        mpfr_init_set_str(r15272, "-0.23566085f0", 10, MPFR_RNDN);
        mpfr_init(r15273);
        mpfr_init_set_str(r15274, "1", 10, MPFR_RNDN);
        mpfr_init(r15275);
        mpfr_init(r15276);
        mpfr_init(r15277);
        mpfr_init(r15278);
        mpfr_init(r15279);
        mpfr_init_set_str(r15280, "0.5589793f0", 10, MPFR_RNDN);
        mpfr_init(r15281);
        mpfr_init_set_str(r15282, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r15283, "4", 10, MPFR_RNDN);
        mpfr_init(r15284);
        mpfr_init(r15285);
        mpfr_init_set_str(r15286, "1/2", 10, MPFR_RNDN);
        mpfr_init(r15287);
        mpfr_init_set_str(r15288, "1/24", 10, MPFR_RNDN);
        mpfr_init(r15289);
        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);
}

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

