#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 r5355028 = x;
        float r5355029 = eps;
        float r5355030 = r5355028 + r5355029;
        float r5355031 = sin(r5355030);
        float r5355032 = sin(r5355028);
        float r5355033 = r5355031 - r5355032;
        return r5355033;
}

double f_id(double x, double eps) {
        double r5355034 = x;
        double r5355035 = eps;
        double r5355036 = r5355034 + r5355035;
        double r5355037 = sin(r5355036);
        double r5355038 = sin(r5355034);
        double r5355039 = r5355037 - r5355038;
        return r5355039;
}


double f_of(float x, float eps) {
        float r5355040 = eps;
        float r5355041 = -1.0210580186871404e-93f;
        bool r5355042 = r5355040 <= r5355041;
        float r5355043 = x;
        float r5355044 = cos(r5355043);
        float r5355045 = sin(r5355040);
        float r5355046 = r5355044 * r5355045;
        float r5355047 = sin(r5355043);
        float r5355048 = cos(r5355040);
        float r5355049 = r5355047 * r5355048;
        float r5355050 = r5355047 - r5355049;
        float r5355051 = r5355046 - r5355050;
        float r5355052 = r5355051 * (r5355051 * r5355051);
        float r5355053 = cbrt(r5355052);
        float r5355054 = 2.4194360613066497e-107f;
        bool r5355055 = r5355040 <= r5355054;
        float r5355056 = r5355043 + r5355040;
        float r5355057 = r5355043 * r5355040;
        float r5355058 = r5355056 * r5355057;
        float r5355059 = 0.5f;
        float r5355060 = r5355058 * r5355059;
        float r5355061 = r5355040 - r5355060;
        float r5355062 = r5355055 ? r5355061 : r5355053;
        float r5355063 = r5355042 ? r5355053 : r5355062;
        return r5355063;
}

double f_od(double x, double eps) {
        double r5355064 = eps;
        double r5355065 = -1.0210580186871404e-93;
        bool r5355066 = r5355064 <= r5355065;
        double r5355067 = x;
        double r5355068 = cos(r5355067);
        double r5355069 = sin(r5355064);
        double r5355070 = r5355068 * r5355069;
        double r5355071 = sin(r5355067);
        double r5355072 = cos(r5355064);
        double r5355073 = r5355071 * r5355072;
        double r5355074 = r5355071 - r5355073;
        double r5355075 = r5355070 - r5355074;
        double r5355076 = r5355075 * (r5355075 * r5355075);
        double r5355077 = cbrt(r5355076);
        double r5355078 = 2.4194360613066497e-107;
        bool r5355079 = r5355064 <= r5355078;
        double r5355080 = r5355067 + r5355064;
        double r5355081 = r5355067 * r5355064;
        double r5355082 = r5355080 * r5355081;
        double r5355083 = 0.5;
        double r5355084 = r5355082 * r5355083;
        double r5355085 = r5355064 - r5355084;
        double r5355086 = r5355079 ? r5355085 : r5355077;
        double r5355087 = r5355066 ? r5355077 : r5355086;
        return r5355087;
}

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 r5355088, r5355089, r5355090, r5355091, r5355092, r5355093;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5355088);
        mpfr_init(r5355089);
        mpfr_init(r5355090);
        mpfr_init(r5355091);
        mpfr_init(r5355092);
        mpfr_init(r5355093);
}

double f_im(double x, double eps) {
        mpfr_set_d(r5355088, x, MPFR_RNDN);
        mpfr_set_d(r5355089, eps, MPFR_RNDN);
        mpfr_add(r5355090, r5355088, r5355089, MPFR_RNDN);
        mpfr_sin(r5355091, r5355090, MPFR_RNDN);
        mpfr_sin(r5355092, r5355088, MPFR_RNDN);
        mpfr_sub(r5355093, r5355091, r5355092, MPFR_RNDN);
        return mpfr_get_d(r5355093, MPFR_RNDN);
}

static mpfr_t r5355094, r5355095, r5355096, r5355097, r5355098, r5355099, r5355100, r5355101, r5355102, r5355103, r5355104, r5355105, r5355106, r5355107, r5355108, r5355109, r5355110, r5355111, r5355112, r5355113, r5355114, r5355115, r5355116, r5355117;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5355094);
        mpfr_init_set_str(r5355095, "-1.0210580186871404e-93", 10, MPFR_RNDN);
        mpfr_init(r5355096);
        mpfr_init(r5355097);
        mpfr_init(r5355098);
        mpfr_init(r5355099);
        mpfr_init(r5355100);
        mpfr_init(r5355101);
        mpfr_init(r5355102);
        mpfr_init(r5355103);
        mpfr_init(r5355104);
        mpfr_init(r5355105);
        mpfr_init(r5355106);
        mpfr_init(r5355107);
        mpfr_init_set_str(r5355108, "2.4194360613066497e-107", 10, MPFR_RNDN);
        mpfr_init(r5355109);
        mpfr_init(r5355110);
        mpfr_init(r5355111);
        mpfr_init(r5355112);
        mpfr_init_set_str(r5355113, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5355114);
        mpfr_init(r5355115);
        mpfr_init(r5355116);
        mpfr_init(r5355117);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r5355094, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5355096, mpfr_cmp(r5355094, r5355095) <= 0, MPFR_RNDN);
        mpfr_set_d(r5355097, x, MPFR_RNDN);
        mpfr_cos(r5355098, r5355097, MPFR_RNDN);
        mpfr_sin(r5355099, r5355094, MPFR_RNDN);
        mpfr_mul(r5355100, r5355098, r5355099, MPFR_RNDN);
        mpfr_sin(r5355101, r5355097, MPFR_RNDN);
        mpfr_cos(r5355102, r5355094, MPFR_RNDN);
        mpfr_mul(r5355103, r5355101, r5355102, MPFR_RNDN);
        mpfr_sub(r5355104, r5355101, r5355103, MPFR_RNDN);
        mpfr_sub(r5355105, r5355100, r5355104, MPFR_RNDN);
        mpfr_mul(r5355106, r5355105, r5355105, MPFR_RNDN); mpfr_mul(r5355106, r5355106, r5355105, MPFR_RNDN);
        mpfr_cbrt(r5355107, r5355106, MPFR_RNDN);
        ;
        mpfr_set_si(r5355109, mpfr_cmp(r5355094, r5355108) <= 0, MPFR_RNDN);
        mpfr_add(r5355110, r5355097, r5355094, MPFR_RNDN);
        mpfr_mul(r5355111, r5355097, r5355094, MPFR_RNDN);
        mpfr_mul(r5355112, r5355110, r5355111, MPFR_RNDN);
        ;
        mpfr_mul(r5355114, r5355112, r5355113, MPFR_RNDN);
        mpfr_sub(r5355115, r5355094, r5355114, MPFR_RNDN);
        if (mpfr_get_si(r5355109, MPFR_RNDN)) { mpfr_set(r5355116, r5355115, MPFR_RNDN); } else { mpfr_set(r5355116, r5355107, MPFR_RNDN); };
        if (mpfr_get_si(r5355096, MPFR_RNDN)) { mpfr_set(r5355117, r5355107, MPFR_RNDN); } else { mpfr_set(r5355117, r5355116, MPFR_RNDN); };
        return mpfr_get_d(r5355117, MPFR_RNDN);
}

static mpfr_t r5355118, r5355119, r5355120, r5355121, r5355122, r5355123, r5355124, r5355125, r5355126, r5355127, r5355128, r5355129, r5355130, r5355131, r5355132, r5355133, r5355134, r5355135, r5355136, r5355137, r5355138, r5355139, r5355140, r5355141;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5355118);
        mpfr_init_set_str(r5355119, "-1.0210580186871404e-93", 10, MPFR_RNDN);
        mpfr_init(r5355120);
        mpfr_init(r5355121);
        mpfr_init(r5355122);
        mpfr_init(r5355123);
        mpfr_init(r5355124);
        mpfr_init(r5355125);
        mpfr_init(r5355126);
        mpfr_init(r5355127);
        mpfr_init(r5355128);
        mpfr_init(r5355129);
        mpfr_init(r5355130);
        mpfr_init(r5355131);
        mpfr_init_set_str(r5355132, "2.4194360613066497e-107", 10, MPFR_RNDN);
        mpfr_init(r5355133);
        mpfr_init(r5355134);
        mpfr_init(r5355135);
        mpfr_init(r5355136);
        mpfr_init_set_str(r5355137, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5355138);
        mpfr_init(r5355139);
        mpfr_init(r5355140);
        mpfr_init(r5355141);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r5355118, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5355120, mpfr_cmp(r5355118, r5355119) <= 0, MPFR_RNDN);
        mpfr_set_d(r5355121, x, MPFR_RNDN);
        mpfr_cos(r5355122, r5355121, MPFR_RNDN);
        mpfr_sin(r5355123, r5355118, MPFR_RNDN);
        mpfr_mul(r5355124, r5355122, r5355123, MPFR_RNDN);
        mpfr_sin(r5355125, r5355121, MPFR_RNDN);
        mpfr_cos(r5355126, r5355118, MPFR_RNDN);
        mpfr_mul(r5355127, r5355125, r5355126, MPFR_RNDN);
        mpfr_sub(r5355128, r5355125, r5355127, MPFR_RNDN);
        mpfr_sub(r5355129, r5355124, r5355128, MPFR_RNDN);
        mpfr_mul(r5355130, r5355129, r5355129, MPFR_RNDN); mpfr_mul(r5355130, r5355130, r5355129, MPFR_RNDN);
        mpfr_cbrt(r5355131, r5355130, MPFR_RNDN);
        ;
        mpfr_set_si(r5355133, mpfr_cmp(r5355118, r5355132) <= 0, MPFR_RNDN);
        mpfr_add(r5355134, r5355121, r5355118, MPFR_RNDN);
        mpfr_mul(r5355135, r5355121, r5355118, MPFR_RNDN);
        mpfr_mul(r5355136, r5355134, r5355135, MPFR_RNDN);
        ;
        mpfr_mul(r5355138, r5355136, r5355137, MPFR_RNDN);
        mpfr_sub(r5355139, r5355118, r5355138, MPFR_RNDN);
        if (mpfr_get_si(r5355133, MPFR_RNDN)) { mpfr_set(r5355140, r5355139, MPFR_RNDN); } else { mpfr_set(r5355140, r5355131, MPFR_RNDN); };
        if (mpfr_get_si(r5355120, MPFR_RNDN)) { mpfr_set(r5355141, r5355131, MPFR_RNDN); } else { mpfr_set(r5355141, r5355140, MPFR_RNDN); };
        return mpfr_get_d(r5355141, MPFR_RNDN);
}

