#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 r29165 = x;
        float r29166 = eps;
        float r29167 = r29165 + r29166;
        float r29168 = sin(r29167);
        float r29169 = sin(r29165);
        float r29170 = r29168 - r29169;
        return r29170;
}

double f_id(double x, double eps) {
        double r29171 = x;
        double r29172 = eps;
        double r29173 = r29171 + r29172;
        double r29174 = sin(r29173);
        double r29175 = sin(r29171);
        double r29176 = r29174 - r29175;
        return r29176;
}


double f_of(float x, float eps) {
        float r29177 = eps;
        float r29178 = -0.001652508212628552;
        bool r29179 = r29177 <= r29178;
        float r29180 = x;
        float r29181 = sin(r29180);
        float r29182 = cos(r29177);
        float r29183 = r29181 * r29182;
        float r29184 = cos(r29180);
        float r29185 = sin(r29177);
        float r29186 = r29184 * r29185;
        float r29187 = r29183 + r29186;
        float r29188 = r29187 - r29181;
        float r29189 = 2.8674663072998626e-39;
        bool r29190 = r29177 <= r29189;
        float r29191 = 2;
        float r29192 = r29177 / r29191;
        float r29193 = sin(r29192);
        float r29194 = r29180 + r29180;
        float r29195 = r29177 + r29194;
        float r29196 = r29195 / r29191;
        float r29197 = cos(r29196);
        float r29198 = r29193 * r29197;
        float r29199 = r29191 * r29198;
        float r29200 = r29186 - r29181;
        float r29201 = r29183 + r29200;
        float r29202 = r29190 ? r29199 : r29201;
        float r29203 = r29179 ? r29188 : r29202;
        return r29203;
}

double f_od(double x, double eps) {
        double r29204 = eps;
        double r29205 = -0.001652508212628552;
        bool r29206 = r29204 <= r29205;
        double r29207 = x;
        double r29208 = sin(r29207);
        double r29209 = cos(r29204);
        double r29210 = r29208 * r29209;
        double r29211 = cos(r29207);
        double r29212 = sin(r29204);
        double r29213 = r29211 * r29212;
        double r29214 = r29210 + r29213;
        double r29215 = r29214 - r29208;
        double r29216 = 2.8674663072998626e-39;
        bool r29217 = r29204 <= r29216;
        double r29218 = 2;
        double r29219 = r29204 / r29218;
        double r29220 = sin(r29219);
        double r29221 = r29207 + r29207;
        double r29222 = r29204 + r29221;
        double r29223 = r29222 / r29218;
        double r29224 = cos(r29223);
        double r29225 = r29220 * r29224;
        double r29226 = r29218 * r29225;
        double r29227 = r29213 - r29208;
        double r29228 = r29210 + r29227;
        double r29229 = r29217 ? r29226 : r29228;
        double r29230 = r29206 ? r29215 : r29229;
        return r29230;
}

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 r29231, r29232, r29233, r29234, r29235, r29236;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r29231);
        mpfr_init(r29232);
        mpfr_init(r29233);
        mpfr_init(r29234);
        mpfr_init(r29235);
        mpfr_init(r29236);
}

double f_im(double x, double eps) {
        mpfr_set_d(r29231, x, MPFR_RNDN);
        mpfr_set_d(r29232, eps, MPFR_RNDN);
        mpfr_add(r29233, r29231, r29232, MPFR_RNDN);
        mpfr_sin(r29234, r29233, MPFR_RNDN);
        mpfr_sin(r29235, r29231, MPFR_RNDN);
        mpfr_sub(r29236, r29234, r29235, MPFR_RNDN);
        return mpfr_get_d(r29236, MPFR_RNDN);
}

static mpfr_t r29237, r29238, r29239, r29240, r29241, r29242, r29243, r29244, r29245, r29246, r29247, r29248, r29249, r29250, r29251, r29252, r29253, r29254, r29255, r29256, r29257, r29258, r29259, r29260, r29261, r29262, r29263;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r29237);
        mpfr_init_set_str(r29238, "-0.001652508212628552", 10, MPFR_RNDN);
        mpfr_init(r29239);
        mpfr_init(r29240);
        mpfr_init(r29241);
        mpfr_init(r29242);
        mpfr_init(r29243);
        mpfr_init(r29244);
        mpfr_init(r29245);
        mpfr_init(r29246);
        mpfr_init(r29247);
        mpfr_init(r29248);
        mpfr_init_set_str(r29249, "2.8674663072998626e-39", 10, MPFR_RNDN);
        mpfr_init(r29250);
        mpfr_init_set_str(r29251, "2", 10, MPFR_RNDN);
        mpfr_init(r29252);
        mpfr_init(r29253);
        mpfr_init(r29254);
        mpfr_init(r29255);
        mpfr_init(r29256);
        mpfr_init(r29257);
        mpfr_init(r29258);
        mpfr_init(r29259);
        mpfr_init(r29260);
        mpfr_init(r29261);
        mpfr_init(r29262);
        mpfr_init(r29263);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r29237, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r29239, mpfr_cmp(r29237, r29238) <= 0, MPFR_RNDN);
        mpfr_set_d(r29240, x, MPFR_RNDN);
        mpfr_sin(r29241, r29240, MPFR_RNDN);
        mpfr_cos(r29242, r29237, MPFR_RNDN);
        mpfr_mul(r29243, r29241, r29242, MPFR_RNDN);
        mpfr_cos(r29244, r29240, MPFR_RNDN);
        mpfr_sin(r29245, r29237, MPFR_RNDN);
        mpfr_mul(r29246, r29244, r29245, MPFR_RNDN);
        mpfr_add(r29247, r29243, r29246, MPFR_RNDN);
        mpfr_sub(r29248, r29247, r29241, MPFR_RNDN);
        ;
        mpfr_set_si(r29250, mpfr_cmp(r29237, r29249) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r29252, r29237, r29251, MPFR_RNDN);
        mpfr_sin(r29253, r29252, MPFR_RNDN);
        mpfr_add(r29254, r29240, r29240, MPFR_RNDN);
        mpfr_add(r29255, r29237, r29254, MPFR_RNDN);
        mpfr_div(r29256, r29255, r29251, MPFR_RNDN);
        mpfr_cos(r29257, r29256, MPFR_RNDN);
        mpfr_mul(r29258, r29253, r29257, MPFR_RNDN);
        mpfr_mul(r29259, r29251, r29258, MPFR_RNDN);
        mpfr_sub(r29260, r29246, r29241, MPFR_RNDN);
        mpfr_add(r29261, r29243, r29260, MPFR_RNDN);
        if (mpfr_get_si(r29250, MPFR_RNDN)) { mpfr_set(r29262, r29259, MPFR_RNDN); } else { mpfr_set(r29262, r29261, MPFR_RNDN); };
        if (mpfr_get_si(r29239, MPFR_RNDN)) { mpfr_set(r29263, r29248, MPFR_RNDN); } else { mpfr_set(r29263, r29262, MPFR_RNDN); };
        return mpfr_get_d(r29263, MPFR_RNDN);
}

static mpfr_t r29264, r29265, r29266, r29267, r29268, r29269, r29270, r29271, r29272, r29273, r29274, r29275, r29276, r29277, r29278, r29279, r29280, r29281, r29282, r29283, r29284, r29285, r29286, r29287, r29288, r29289, r29290;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r29264);
        mpfr_init_set_str(r29265, "-0.001652508212628552", 10, MPFR_RNDN);
        mpfr_init(r29266);
        mpfr_init(r29267);
        mpfr_init(r29268);
        mpfr_init(r29269);
        mpfr_init(r29270);
        mpfr_init(r29271);
        mpfr_init(r29272);
        mpfr_init(r29273);
        mpfr_init(r29274);
        mpfr_init(r29275);
        mpfr_init_set_str(r29276, "2.8674663072998626e-39", 10, MPFR_RNDN);
        mpfr_init(r29277);
        mpfr_init_set_str(r29278, "2", 10, MPFR_RNDN);
        mpfr_init(r29279);
        mpfr_init(r29280);
        mpfr_init(r29281);
        mpfr_init(r29282);
        mpfr_init(r29283);
        mpfr_init(r29284);
        mpfr_init(r29285);
        mpfr_init(r29286);
        mpfr_init(r29287);
        mpfr_init(r29288);
        mpfr_init(r29289);
        mpfr_init(r29290);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r29264, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r29266, mpfr_cmp(r29264, r29265) <= 0, MPFR_RNDN);
        mpfr_set_d(r29267, x, MPFR_RNDN);
        mpfr_sin(r29268, r29267, MPFR_RNDN);
        mpfr_cos(r29269, r29264, MPFR_RNDN);
        mpfr_mul(r29270, r29268, r29269, MPFR_RNDN);
        mpfr_cos(r29271, r29267, MPFR_RNDN);
        mpfr_sin(r29272, r29264, MPFR_RNDN);
        mpfr_mul(r29273, r29271, r29272, MPFR_RNDN);
        mpfr_add(r29274, r29270, r29273, MPFR_RNDN);
        mpfr_sub(r29275, r29274, r29268, MPFR_RNDN);
        ;
        mpfr_set_si(r29277, mpfr_cmp(r29264, r29276) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r29279, r29264, r29278, MPFR_RNDN);
        mpfr_sin(r29280, r29279, MPFR_RNDN);
        mpfr_add(r29281, r29267, r29267, MPFR_RNDN);
        mpfr_add(r29282, r29264, r29281, MPFR_RNDN);
        mpfr_div(r29283, r29282, r29278, MPFR_RNDN);
        mpfr_cos(r29284, r29283, MPFR_RNDN);
        mpfr_mul(r29285, r29280, r29284, MPFR_RNDN);
        mpfr_mul(r29286, r29278, r29285, MPFR_RNDN);
        mpfr_sub(r29287, r29273, r29268, MPFR_RNDN);
        mpfr_add(r29288, r29270, r29287, MPFR_RNDN);
        if (mpfr_get_si(r29277, MPFR_RNDN)) { mpfr_set(r29289, r29286, MPFR_RNDN); } else { mpfr_set(r29289, r29288, MPFR_RNDN); };
        if (mpfr_get_si(r29266, MPFR_RNDN)) { mpfr_set(r29290, r29275, MPFR_RNDN); } else { mpfr_set(r29290, r29289, MPFR_RNDN); };
        return mpfr_get_d(r29290, MPFR_RNDN);
}

