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

char *name = "NMSE example 3.4";

double f_if(float x) {
        float r28093 = 1.0f;
        float r28094 = x;
        float r28095 = cos(r28094);
        float r28096 = r28093 - r28095;
        float r28097 = sin(r28094);
        float r28098 = r28096 / r28097;
        return r28098;
}

double f_id(double x) {
        double r28099 = 1.0;
        double r28100 = x;
        double r28101 = cos(r28100);
        double r28102 = r28099 - r28101;
        double r28103 = sin(r28100);
        double r28104 = r28102 / r28103;
        return r28104;
}


double f_of(float x) {
        float r28105 = x;
        float r28106 = -6.667433711053936e-08f;
        bool r28107 = r28105 <= r28106;
        float r28108 = sin(r28105);
        float r28109 = r28108 * r28108;
        float r28110 = 1.0f;
        float r28111 = cos(r28105);
        float r28112 = r28110 + r28111;
        float r28113 = r28110 / r28112;
        float r28114 = r28108 / r28113;
        float r28115 = r28109 / r28114;
        float r28116 = 1183236732512159.2f;
        bool r28117 = r28105 <= r28116;
        float r28118 = 0.041666666666666664f;
        float r28119 = 3.0f;
        float r28120 = pow(r28105, r28119);
        float r28121 = r28118 * r28120;
        float r28122 = 0.004166666666666667f;
        float r28123 = 5.0f;
        float r28124 = pow(r28105, r28123);
        float r28125 = r28122 * r28124;
        float r28126 = 0.5f;
        float r28127 = r28126 * r28105;
        float r28128 = r28125 + r28127;
        float r28129 = r28121 + r28128;
        float r28130 = r28110 - r28111;
        float r28131 = r28108 / r28130;
        float r28132 = r28110 / r28131;
        float r28133 = r28117 ? r28129 : r28132;
        float r28134 = r28107 ? r28115 : r28133;
        return r28134;
}

double f_od(double x) {
        double r28135 = x;
        double r28136 = -6.667433711053936e-08;
        bool r28137 = r28135 <= r28136;
        double r28138 = sin(r28135);
        double r28139 = r28138 * r28138;
        double r28140 = 1.0;
        double r28141 = cos(r28135);
        double r28142 = r28140 + r28141;
        double r28143 = r28140 / r28142;
        double r28144 = r28138 / r28143;
        double r28145 = r28139 / r28144;
        double r28146 = 1183236732512159.2;
        bool r28147 = r28135 <= r28146;
        double r28148 = 0.041666666666666664;
        double r28149 = 3.0;
        double r28150 = pow(r28135, r28149);
        double r28151 = r28148 * r28150;
        double r28152 = 0.004166666666666667;
        double r28153 = 5.0;
        double r28154 = pow(r28135, r28153);
        double r28155 = r28152 * r28154;
        double r28156 = 0.5;
        double r28157 = r28156 * r28135;
        double r28158 = r28155 + r28157;
        double r28159 = r28151 + r28158;
        double r28160 = r28140 - r28141;
        double r28161 = r28138 / r28160;
        double r28162 = r28140 / r28161;
        double r28163 = r28147 ? r28159 : r28162;
        double r28164 = r28137 ? r28145 : r28163;
        return r28164;
}

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 r28165, r28166, r28167, r28168, r28169, r28170;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r28165, "1", 10, MPFR_RNDN);
        mpfr_init(r28166);
        mpfr_init(r28167);
        mpfr_init(r28168);
        mpfr_init(r28169);
        mpfr_init(r28170);
}

double f_im(double x) {
        ;
        mpfr_set_d(r28166, x, MPFR_RNDN);
        mpfr_cos(r28167, r28166, MPFR_RNDN);
        mpfr_sub(r28168, r28165, r28167, MPFR_RNDN);
        mpfr_sin(r28169, r28166, MPFR_RNDN);
        mpfr_div(r28170, r28168, r28169, MPFR_RNDN);
        return mpfr_get_d(r28170, MPFR_RNDN);
}

static mpfr_t r28171, r28172, r28173, r28174, r28175, r28176, r28177, r28178, r28179, r28180, r28181, r28182, r28183, r28184, r28185, r28186, r28187, r28188, r28189, r28190, r28191, r28192, r28193, r28194, r28195, r28196, r28197, r28198, r28199, r28200;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r28171);
        mpfr_init_set_str(r28172, "-6.667433711053936e-08", 10, MPFR_RNDN);
        mpfr_init(r28173);
        mpfr_init(r28174);
        mpfr_init(r28175);
        mpfr_init_set_str(r28176, "1", 10, MPFR_RNDN);
        mpfr_init(r28177);
        mpfr_init(r28178);
        mpfr_init(r28179);
        mpfr_init(r28180);
        mpfr_init(r28181);
        mpfr_init_set_str(r28182, "1183236732512159.2", 10, MPFR_RNDN);
        mpfr_init(r28183);
        mpfr_init_set_str(r28184, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r28185, "3", 10, MPFR_RNDN);
        mpfr_init(r28186);
        mpfr_init(r28187);
        mpfr_init_set_str(r28188, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r28189, "5", 10, MPFR_RNDN);
        mpfr_init(r28190);
        mpfr_init(r28191);
        mpfr_init_set_str(r28192, "1/2", 10, MPFR_RNDN);
        mpfr_init(r28193);
        mpfr_init(r28194);
        mpfr_init(r28195);
        mpfr_init(r28196);
        mpfr_init(r28197);
        mpfr_init(r28198);
        mpfr_init(r28199);
        mpfr_init(r28200);
}

double f_fm(double x) {
        mpfr_set_d(r28171, x, MPFR_RNDN);
        ;
        mpfr_set_si(r28173, mpfr_cmp(r28171, r28172) <= 0, MPFR_RNDN);
        mpfr_sin(r28174, r28171, MPFR_RNDN);
        mpfr_mul(r28175, r28174, r28174, MPFR_RNDN);
        ;
        mpfr_cos(r28177, r28171, MPFR_RNDN);
        mpfr_add(r28178, r28176, r28177, MPFR_RNDN);
        mpfr_div(r28179, r28176, r28178, MPFR_RNDN);
        mpfr_div(r28180, r28174, r28179, MPFR_RNDN);
        mpfr_div(r28181, r28175, r28180, MPFR_RNDN);
        ;
        mpfr_set_si(r28183, mpfr_cmp(r28171, r28182) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28186, r28171, r28185, MPFR_RNDN);
        mpfr_mul(r28187, r28184, r28186, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28190, r28171, r28189, MPFR_RNDN);
        mpfr_mul(r28191, r28188, r28190, MPFR_RNDN);
        ;
        mpfr_mul(r28193, r28192, r28171, MPFR_RNDN);
        mpfr_add(r28194, r28191, r28193, MPFR_RNDN);
        mpfr_add(r28195, r28187, r28194, MPFR_RNDN);
        mpfr_sub(r28196, r28176, r28177, MPFR_RNDN);
        mpfr_div(r28197, r28174, r28196, MPFR_RNDN);
        mpfr_div(r28198, r28176, r28197, MPFR_RNDN);
        if (mpfr_get_si(r28183, MPFR_RNDN)) { mpfr_set(r28199, r28195, MPFR_RNDN); } else { mpfr_set(r28199, r28198, MPFR_RNDN); };
        if (mpfr_get_si(r28173, MPFR_RNDN)) { mpfr_set(r28200, r28181, MPFR_RNDN); } else { mpfr_set(r28200, r28199, MPFR_RNDN); };
        return mpfr_get_d(r28200, MPFR_RNDN);
}

static mpfr_t r28201, r28202, r28203, r28204, r28205, r28206, r28207, r28208, r28209, r28210, r28211, r28212, r28213, r28214, r28215, r28216, r28217, r28218, r28219, r28220, r28221, r28222, r28223, r28224, r28225, r28226, r28227, r28228, r28229, r28230;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r28201);
        mpfr_init_set_str(r28202, "-6.667433711053936e-08", 10, MPFR_RNDN);
        mpfr_init(r28203);
        mpfr_init(r28204);
        mpfr_init(r28205);
        mpfr_init_set_str(r28206, "1", 10, MPFR_RNDN);
        mpfr_init(r28207);
        mpfr_init(r28208);
        mpfr_init(r28209);
        mpfr_init(r28210);
        mpfr_init(r28211);
        mpfr_init_set_str(r28212, "1183236732512159.2", 10, MPFR_RNDN);
        mpfr_init(r28213);
        mpfr_init_set_str(r28214, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r28215, "3", 10, MPFR_RNDN);
        mpfr_init(r28216);
        mpfr_init(r28217);
        mpfr_init_set_str(r28218, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r28219, "5", 10, MPFR_RNDN);
        mpfr_init(r28220);
        mpfr_init(r28221);
        mpfr_init_set_str(r28222, "1/2", 10, MPFR_RNDN);
        mpfr_init(r28223);
        mpfr_init(r28224);
        mpfr_init(r28225);
        mpfr_init(r28226);
        mpfr_init(r28227);
        mpfr_init(r28228);
        mpfr_init(r28229);
        mpfr_init(r28230);
}

double f_dm(double x) {
        mpfr_set_d(r28201, x, MPFR_RNDN);
        ;
        mpfr_set_si(r28203, mpfr_cmp(r28201, r28202) <= 0, MPFR_RNDN);
        mpfr_sin(r28204, r28201, MPFR_RNDN);
        mpfr_mul(r28205, r28204, r28204, MPFR_RNDN);
        ;
        mpfr_cos(r28207, r28201, MPFR_RNDN);
        mpfr_add(r28208, r28206, r28207, MPFR_RNDN);
        mpfr_div(r28209, r28206, r28208, MPFR_RNDN);
        mpfr_div(r28210, r28204, r28209, MPFR_RNDN);
        mpfr_div(r28211, r28205, r28210, MPFR_RNDN);
        ;
        mpfr_set_si(r28213, mpfr_cmp(r28201, r28212) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28216, r28201, r28215, MPFR_RNDN);
        mpfr_mul(r28217, r28214, r28216, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28220, r28201, r28219, MPFR_RNDN);
        mpfr_mul(r28221, r28218, r28220, MPFR_RNDN);
        ;
        mpfr_mul(r28223, r28222, r28201, MPFR_RNDN);
        mpfr_add(r28224, r28221, r28223, MPFR_RNDN);
        mpfr_add(r28225, r28217, r28224, MPFR_RNDN);
        mpfr_sub(r28226, r28206, r28207, MPFR_RNDN);
        mpfr_div(r28227, r28204, r28226, MPFR_RNDN);
        mpfr_div(r28228, r28206, r28227, MPFR_RNDN);
        if (mpfr_get_si(r28213, MPFR_RNDN)) { mpfr_set(r28229, r28225, MPFR_RNDN); } else { mpfr_set(r28229, r28228, MPFR_RNDN); };
        if (mpfr_get_si(r28203, MPFR_RNDN)) { mpfr_set(r28230, r28211, MPFR_RNDN); } else { mpfr_set(r28230, r28229, MPFR_RNDN); };
        return mpfr_get_d(r28230, MPFR_RNDN);
}

