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

char *name = "NMSE example 3.3";

double f_if(float x, float eps) {
        float r28231 = x;
        float r28232 = eps;
        float r28233 = r28231 + r28232;
        float r28234 = sin(r28233);
        float r28235 = sin(r28231);
        float r28236 = r28234 - r28235;
        return r28236;
}

double f_id(double x, double eps) {
        double r28237 = x;
        double r28238 = eps;
        double r28239 = r28237 + r28238;
        double r28240 = sin(r28239);
        double r28241 = sin(r28237);
        double r28242 = r28240 - r28241;
        return r28242;
}


double f_of(float x, float eps) {
        float r28243 = eps;
        float r28244 = -9.230164504011904f;
        bool r28245 = r28243 <= r28244;
        float r28246 = x;
        float r28247 = sin(r28246);
        float r28248 = cos(r28243);
        float r28249 = r28247 * r28248;
        float r28250 = cos(r28246);
        float r28251 = sin(r28243);
        float r28252 = r28250 * r28251;
        float r28253 = r28252 - r28247;
        float r28254 = r28249 + r28253;
        float r28255 = 1183236732512159.2f;
        bool r28256 = r28243 <= r28255;
        float r28257 = 2.0f;
        float r28258 = r28243 / r28257;
        float r28259 = sin(r28258);
        float r28260 = r28246 + r28246;
        float r28261 = r28243 + r28260;
        float r28262 = r28261 / r28257;
        float r28263 = cos(r28262);
        float r28264 = r28259 * r28263;
        float r28265 = r28257 * r28264;
        float r28266 = r28256 ? r28265 : r28254;
        float r28267 = r28245 ? r28254 : r28266;
        return r28267;
}

double f_od(double x, double eps) {
        double r28268 = eps;
        double r28269 = -9.230164504011904;
        bool r28270 = r28268 <= r28269;
        double r28271 = x;
        double r28272 = sin(r28271);
        double r28273 = cos(r28268);
        double r28274 = r28272 * r28273;
        double r28275 = cos(r28271);
        double r28276 = sin(r28268);
        double r28277 = r28275 * r28276;
        double r28278 = r28277 - r28272;
        double r28279 = r28274 + r28278;
        double r28280 = 1183236732512159.2;
        bool r28281 = r28268 <= r28280;
        double r28282 = 2.0;
        double r28283 = r28268 / r28282;
        double r28284 = sin(r28283);
        double r28285 = r28271 + r28271;
        double r28286 = r28268 + r28285;
        double r28287 = r28286 / r28282;
        double r28288 = cos(r28287);
        double r28289 = r28284 * r28288;
        double r28290 = r28282 * r28289;
        double r28291 = r28281 ? r28290 : r28279;
        double r28292 = r28270 ? r28279 : r28291;
        return r28292;
}

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 r28293, r28294, r28295, r28296, r28297, r28298;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r28293);
        mpfr_init(r28294);
        mpfr_init(r28295);
        mpfr_init(r28296);
        mpfr_init(r28297);
        mpfr_init(r28298);
}

double f_im(double x, double eps) {
        mpfr_set_d(r28293, x, MPFR_RNDN);
        mpfr_set_d(r28294, eps, MPFR_RNDN);
        mpfr_add(r28295, r28293, r28294, MPFR_RNDN);
        mpfr_sin(r28296, r28295, MPFR_RNDN);
        mpfr_sin(r28297, r28293, MPFR_RNDN);
        mpfr_sub(r28298, r28296, r28297, MPFR_RNDN);
        return mpfr_get_d(r28298, MPFR_RNDN);
}

static mpfr_t r28299, r28300, r28301, r28302, r28303, r28304, r28305, r28306, r28307, r28308, r28309, r28310, r28311, r28312, r28313, r28314, r28315, r28316, r28317, r28318, r28319, r28320, r28321, r28322, r28323;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r28299);
        mpfr_init_set_str(r28300, "-9.230164504011904", 10, MPFR_RNDN);
        mpfr_init(r28301);
        mpfr_init(r28302);
        mpfr_init(r28303);
        mpfr_init(r28304);
        mpfr_init(r28305);
        mpfr_init(r28306);
        mpfr_init(r28307);
        mpfr_init(r28308);
        mpfr_init(r28309);
        mpfr_init(r28310);
        mpfr_init_set_str(r28311, "1183236732512159.2", 10, MPFR_RNDN);
        mpfr_init(r28312);
        mpfr_init_set_str(r28313, "2", 10, MPFR_RNDN);
        mpfr_init(r28314);
        mpfr_init(r28315);
        mpfr_init(r28316);
        mpfr_init(r28317);
        mpfr_init(r28318);
        mpfr_init(r28319);
        mpfr_init(r28320);
        mpfr_init(r28321);
        mpfr_init(r28322);
        mpfr_init(r28323);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r28299, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r28301, mpfr_cmp(r28299, r28300) <= 0, MPFR_RNDN);
        mpfr_set_d(r28302, x, MPFR_RNDN);
        mpfr_sin(r28303, r28302, MPFR_RNDN);
        mpfr_cos(r28304, r28299, MPFR_RNDN);
        mpfr_mul(r28305, r28303, r28304, MPFR_RNDN);
        mpfr_cos(r28306, r28302, MPFR_RNDN);
        mpfr_sin(r28307, r28299, MPFR_RNDN);
        mpfr_mul(r28308, r28306, r28307, MPFR_RNDN);
        mpfr_sub(r28309, r28308, r28303, MPFR_RNDN);
        mpfr_add(r28310, r28305, r28309, MPFR_RNDN);
        ;
        mpfr_set_si(r28312, mpfr_cmp(r28299, r28311) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r28314, r28299, r28313, MPFR_RNDN);
        mpfr_sin(r28315, r28314, MPFR_RNDN);
        mpfr_add(r28316, r28302, r28302, MPFR_RNDN);
        mpfr_add(r28317, r28299, r28316, MPFR_RNDN);
        mpfr_div(r28318, r28317, r28313, MPFR_RNDN);
        mpfr_cos(r28319, r28318, MPFR_RNDN);
        mpfr_mul(r28320, r28315, r28319, MPFR_RNDN);
        mpfr_mul(r28321, r28313, r28320, MPFR_RNDN);
        if (mpfr_get_si(r28312, MPFR_RNDN)) { mpfr_set(r28322, r28321, MPFR_RNDN); } else { mpfr_set(r28322, r28310, MPFR_RNDN); };
        if (mpfr_get_si(r28301, MPFR_RNDN)) { mpfr_set(r28323, r28310, MPFR_RNDN); } else { mpfr_set(r28323, r28322, MPFR_RNDN); };
        return mpfr_get_d(r28323, MPFR_RNDN);
}

static mpfr_t r28324, r28325, r28326, r28327, r28328, r28329, r28330, r28331, r28332, r28333, r28334, r28335, r28336, r28337, r28338, r28339, r28340, r28341, r28342, r28343, r28344, r28345, r28346, r28347, r28348;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r28324);
        mpfr_init_set_str(r28325, "-9.230164504011904", 10, MPFR_RNDN);
        mpfr_init(r28326);
        mpfr_init(r28327);
        mpfr_init(r28328);
        mpfr_init(r28329);
        mpfr_init(r28330);
        mpfr_init(r28331);
        mpfr_init(r28332);
        mpfr_init(r28333);
        mpfr_init(r28334);
        mpfr_init(r28335);
        mpfr_init_set_str(r28336, "1183236732512159.2", 10, MPFR_RNDN);
        mpfr_init(r28337);
        mpfr_init_set_str(r28338, "2", 10, MPFR_RNDN);
        mpfr_init(r28339);
        mpfr_init(r28340);
        mpfr_init(r28341);
        mpfr_init(r28342);
        mpfr_init(r28343);
        mpfr_init(r28344);
        mpfr_init(r28345);
        mpfr_init(r28346);
        mpfr_init(r28347);
        mpfr_init(r28348);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r28324, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r28326, mpfr_cmp(r28324, r28325) <= 0, MPFR_RNDN);
        mpfr_set_d(r28327, x, MPFR_RNDN);
        mpfr_sin(r28328, r28327, MPFR_RNDN);
        mpfr_cos(r28329, r28324, MPFR_RNDN);
        mpfr_mul(r28330, r28328, r28329, MPFR_RNDN);
        mpfr_cos(r28331, r28327, MPFR_RNDN);
        mpfr_sin(r28332, r28324, MPFR_RNDN);
        mpfr_mul(r28333, r28331, r28332, MPFR_RNDN);
        mpfr_sub(r28334, r28333, r28328, MPFR_RNDN);
        mpfr_add(r28335, r28330, r28334, MPFR_RNDN);
        ;
        mpfr_set_si(r28337, mpfr_cmp(r28324, r28336) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r28339, r28324, r28338, MPFR_RNDN);
        mpfr_sin(r28340, r28339, MPFR_RNDN);
        mpfr_add(r28341, r28327, r28327, MPFR_RNDN);
        mpfr_add(r28342, r28324, r28341, MPFR_RNDN);
        mpfr_div(r28343, r28342, r28338, MPFR_RNDN);
        mpfr_cos(r28344, r28343, MPFR_RNDN);
        mpfr_mul(r28345, r28340, r28344, MPFR_RNDN);
        mpfr_mul(r28346, r28338, r28345, MPFR_RNDN);
        if (mpfr_get_si(r28337, MPFR_RNDN)) { mpfr_set(r28347, r28346, MPFR_RNDN); } else { mpfr_set(r28347, r28335, MPFR_RNDN); };
        if (mpfr_get_si(r28326, MPFR_RNDN)) { mpfr_set(r28348, r28335, MPFR_RNDN); } else { mpfr_set(r28348, r28347, MPFR_RNDN); };
        return mpfr_get_d(r28348, MPFR_RNDN);
}

