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

char *name = "NMSE Section 6.1 mentioned, A";

double f_if(float x, float eps) {
        float r8175 = 1.0f;
        float r8176 = eps;
        float r8177 = r8175 / r8176;
        float r8178 = r8175 + r8177;
        float r8179 = r8175 - r8176;
        float r8180 = x;
        float r8181 = r8179 * r8180;
        float r8182 = -r8181;
        float r8183 = exp(r8182);
        float r8184 = r8178 * r8183;
        float r8185 = r8177 - r8175;
        float r8186 = r8175 + r8176;
        float r8187 = r8186 * r8180;
        float r8188 = -r8187;
        float r8189 = exp(r8188);
        float r8190 = r8185 * r8189;
        float r8191 = r8184 - r8190;
        float r8192 = 2.0f;
        float r8193 = r8191 / r8192;
        return r8193;
}

double f_id(double x, double eps) {
        double r8194 = 1.0;
        double r8195 = eps;
        double r8196 = r8194 / r8195;
        double r8197 = r8194 + r8196;
        double r8198 = r8194 - r8195;
        double r8199 = x;
        double r8200 = r8198 * r8199;
        double r8201 = -r8200;
        double r8202 = exp(r8201);
        double r8203 = r8197 * r8202;
        double r8204 = r8196 - r8194;
        double r8205 = r8194 + r8195;
        double r8206 = r8205 * r8199;
        double r8207 = -r8206;
        double r8208 = exp(r8207);
        double r8209 = r8204 * r8208;
        double r8210 = r8203 - r8209;
        double r8211 = 2.0;
        double r8212 = r8210 / r8211;
        return r8212;
}


double f_of(float x, float eps) {
        float r8213 = x;
        float r8214 = 27.937358935982928f;
        bool r8215 = r8213 <= r8214;
        float r8216 = 2.0f;
        float r8217 = 0.6666666666666666f;
        float r8218 = 3.0f;
        float r8219 = pow(r8213, r8218);
        float r8220 = r8217 * r8219;
        float r8221 = log1p(r8220);
        float r8222 = log1p(r8221);
        float r8223 = expm1(r8222);
        float r8224 = expm1(r8223);
        float r8225 = r8216 + r8224;
        float r8226 = pow(r8213, r8216);
        float r8227 = r8225 - r8226;
        float r8228 = r8227 / r8216;
        float r8229 = 1.0f;
        float r8230 = eps;
        float r8231 = r8229 / r8230;
        float r8232 = r8231 + r8229;
        float r8233 = r8229 - r8230;
        float r8234 = -r8213;
        float r8235 = r8233 * r8234;
        float r8236 = exp(r8235);
        float r8237 = r8230 + r8229;
        float r8238 = r8237 * r8234;
        float r8239 = exp(r8238);
        float r8240 = r8231 - r8229;
        float r8241 = -r8240;
        float r8242 = r8239 * r8241;
        float r8243 = fma(r8232, r8236, r8242);
        float r8244 = r8243 / r8216;
        float r8245 = r8215 ? r8228 : r8244;
        return r8245;
}

double f_od(double x, double eps) {
        double r8246 = x;
        double r8247 = 27.937358935982928;
        bool r8248 = r8246 <= r8247;
        double r8249 = 2.0;
        double r8250 = 0.6666666666666666;
        double r8251 = 3.0;
        double r8252 = pow(r8246, r8251);
        double r8253 = r8250 * r8252;
        double r8254 = log1p(r8253);
        double r8255 = log1p(r8254);
        double r8256 = expm1(r8255);
        double r8257 = expm1(r8256);
        double r8258 = r8249 + r8257;
        double r8259 = pow(r8246, r8249);
        double r8260 = r8258 - r8259;
        double r8261 = r8260 / r8249;
        double r8262 = 1.0;
        double r8263 = eps;
        double r8264 = r8262 / r8263;
        double r8265 = r8264 + r8262;
        double r8266 = r8262 - r8263;
        double r8267 = -r8246;
        double r8268 = r8266 * r8267;
        double r8269 = exp(r8268);
        double r8270 = r8263 + r8262;
        double r8271 = r8270 * r8267;
        double r8272 = exp(r8271);
        double r8273 = r8264 - r8262;
        double r8274 = -r8273;
        double r8275 = r8272 * r8274;
        double r8276 = fma(r8265, r8269, r8275);
        double r8277 = r8276 / r8249;
        double r8278 = r8248 ? r8261 : r8277;
        return r8278;
}

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 r8279, r8280, r8281, r8282, r8283, r8284, r8285, r8286, r8287, r8288, r8289, r8290, r8291, r8292, r8293, r8294, r8295, r8296, r8297;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8279, "1", 10, MPFR_RNDN);
        mpfr_init(r8280);
        mpfr_init(r8281);
        mpfr_init(r8282);
        mpfr_init(r8283);
        mpfr_init(r8284);
        mpfr_init(r8285);
        mpfr_init(r8286);
        mpfr_init(r8287);
        mpfr_init(r8288);
        mpfr_init(r8289);
        mpfr_init(r8290);
        mpfr_init(r8291);
        mpfr_init(r8292);
        mpfr_init(r8293);
        mpfr_init(r8294);
        mpfr_init(r8295);
        mpfr_init_set_str(r8296, "2", 10, MPFR_RNDN);
        mpfr_init(r8297);
}

double f_im(double x, double eps) {
        ;
        mpfr_set_d(r8280, eps, MPFR_RNDN);
        mpfr_div(r8281, r8279, r8280, MPFR_RNDN);
        mpfr_add(r8282, r8279, r8281, MPFR_RNDN);
        mpfr_sub(r8283, r8279, r8280, MPFR_RNDN);
        mpfr_set_d(r8284, x, MPFR_RNDN);
        mpfr_mul(r8285, r8283, r8284, MPFR_RNDN);
        mpfr_neg(r8286, r8285, MPFR_RNDN);
        mpfr_exp(r8287, r8286, MPFR_RNDN);
        mpfr_mul(r8288, r8282, r8287, MPFR_RNDN);
        mpfr_sub(r8289, r8281, r8279, MPFR_RNDN);
        mpfr_add(r8290, r8279, r8280, MPFR_RNDN);
        mpfr_mul(r8291, r8290, r8284, MPFR_RNDN);
        mpfr_neg(r8292, r8291, MPFR_RNDN);
        mpfr_exp(r8293, r8292, MPFR_RNDN);
        mpfr_mul(r8294, r8289, r8293, MPFR_RNDN);
        mpfr_sub(r8295, r8288, r8294, MPFR_RNDN);
        ;
        mpfr_div(r8297, r8295, r8296, MPFR_RNDN);
        return mpfr_get_d(r8297, MPFR_RNDN);
}

static mpfr_t r8298, r8299, r8300, r8301, r8302, r8303, r8304, r8305, r8306, r8307, r8308, r8309, r8310, r8311, r8312, r8313, r8314, r8315, r8316, r8317, r8318, r8319, r8320, r8321, r8322, r8323, r8324, r8325, r8326, r8327, r8328, r8329, r8330;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8298);
        mpfr_init_set_str(r8299, "27.937358935982928", 10, MPFR_RNDN);
        mpfr_init(r8300);
        mpfr_init_set_str(r8301, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8302, "2/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r8303, "3", 10, MPFR_RNDN);
        mpfr_init(r8304);
        mpfr_init(r8305);
        mpfr_init(r8306);
        mpfr_init(r8307);
        mpfr_init(r8308);
        mpfr_init(r8309);
        mpfr_init(r8310);
        mpfr_init(r8311);
        mpfr_init(r8312);
        mpfr_init(r8313);
        mpfr_init_set_str(r8314, "1", 10, MPFR_RNDN);
        mpfr_init(r8315);
        mpfr_init(r8316);
        mpfr_init(r8317);
        mpfr_init(r8318);
        mpfr_init(r8319);
        mpfr_init(r8320);
        mpfr_init(r8321);
        mpfr_init(r8322);
        mpfr_init(r8323);
        mpfr_init(r8324);
        mpfr_init(r8325);
        mpfr_init(r8326);
        mpfr_init(r8327);
        mpfr_init(r8328);
        mpfr_init(r8329);
        mpfr_init(r8330);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r8298, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8300, mpfr_cmp(r8298, r8299) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r8304, r8298, r8303, MPFR_RNDN);
        mpfr_mul(r8305, r8302, r8304, MPFR_RNDN);
        mpfr_log1p(r8306, r8305, MPFR_RNDN);
        mpfr_log1p(r8307, r8306, MPFR_RNDN);
        mpfr_expm1(r8308, r8307, MPFR_RNDN);
        mpfr_expm1(r8309, r8308, MPFR_RNDN);
        mpfr_add(r8310, r8301, r8309, MPFR_RNDN);
        mpfr_pow(r8311, r8298, r8301, MPFR_RNDN);
        mpfr_sub(r8312, r8310, r8311, MPFR_RNDN);
        mpfr_div(r8313, r8312, r8301, MPFR_RNDN);
        ;
        mpfr_set_d(r8315, eps, MPFR_RNDN);
        mpfr_div(r8316, r8314, r8315, MPFR_RNDN);
        mpfr_add(r8317, r8316, r8314, MPFR_RNDN);
        mpfr_sub(r8318, r8314, r8315, MPFR_RNDN);
        mpfr_neg(r8319, r8298, MPFR_RNDN);
        mpfr_mul(r8320, r8318, r8319, MPFR_RNDN);
        mpfr_exp(r8321, r8320, MPFR_RNDN);
        mpfr_add(r8322, r8315, r8314, MPFR_RNDN);
        mpfr_mul(r8323, r8322, r8319, MPFR_RNDN);
        mpfr_exp(r8324, r8323, MPFR_RNDN);
        mpfr_sub(r8325, r8316, r8314, MPFR_RNDN);
        mpfr_neg(r8326, r8325, MPFR_RNDN);
        mpfr_mul(r8327, r8324, r8326, MPFR_RNDN);
        mpfr_fma(r8328, r8317, r8321, r8327, MPFR_RNDN);
        mpfr_div(r8329, r8328, r8301, MPFR_RNDN);
        if (mpfr_get_si(r8300, MPFR_RNDN)) { mpfr_set(r8330, r8313, MPFR_RNDN); } else { mpfr_set(r8330, r8329, MPFR_RNDN); };
        return mpfr_get_d(r8330, MPFR_RNDN);
}

static mpfr_t r8331, r8332, r8333, r8334, r8335, r8336, r8337, r8338, r8339, r8340, r8341, r8342, r8343, r8344, r8345, r8346, r8347, r8348, r8349, r8350, r8351, r8352, r8353, r8354, r8355, r8356, r8357, r8358, r8359, r8360, r8361, r8362, r8363;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8331);
        mpfr_init_set_str(r8332, "27.937358935982928", 10, MPFR_RNDN);
        mpfr_init(r8333);
        mpfr_init_set_str(r8334, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8335, "2/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r8336, "3", 10, MPFR_RNDN);
        mpfr_init(r8337);
        mpfr_init(r8338);
        mpfr_init(r8339);
        mpfr_init(r8340);
        mpfr_init(r8341);
        mpfr_init(r8342);
        mpfr_init(r8343);
        mpfr_init(r8344);
        mpfr_init(r8345);
        mpfr_init(r8346);
        mpfr_init_set_str(r8347, "1", 10, MPFR_RNDN);
        mpfr_init(r8348);
        mpfr_init(r8349);
        mpfr_init(r8350);
        mpfr_init(r8351);
        mpfr_init(r8352);
        mpfr_init(r8353);
        mpfr_init(r8354);
        mpfr_init(r8355);
        mpfr_init(r8356);
        mpfr_init(r8357);
        mpfr_init(r8358);
        mpfr_init(r8359);
        mpfr_init(r8360);
        mpfr_init(r8361);
        mpfr_init(r8362);
        mpfr_init(r8363);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r8331, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8333, mpfr_cmp(r8331, r8332) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r8337, r8331, r8336, MPFR_RNDN);
        mpfr_mul(r8338, r8335, r8337, MPFR_RNDN);
        mpfr_log1p(r8339, r8338, MPFR_RNDN);
        mpfr_log1p(r8340, r8339, MPFR_RNDN);
        mpfr_expm1(r8341, r8340, MPFR_RNDN);
        mpfr_expm1(r8342, r8341, MPFR_RNDN);
        mpfr_add(r8343, r8334, r8342, MPFR_RNDN);
        mpfr_pow(r8344, r8331, r8334, MPFR_RNDN);
        mpfr_sub(r8345, r8343, r8344, MPFR_RNDN);
        mpfr_div(r8346, r8345, r8334, MPFR_RNDN);
        ;
        mpfr_set_d(r8348, eps, MPFR_RNDN);
        mpfr_div(r8349, r8347, r8348, MPFR_RNDN);
        mpfr_add(r8350, r8349, r8347, MPFR_RNDN);
        mpfr_sub(r8351, r8347, r8348, MPFR_RNDN);
        mpfr_neg(r8352, r8331, MPFR_RNDN);
        mpfr_mul(r8353, r8351, r8352, MPFR_RNDN);
        mpfr_exp(r8354, r8353, MPFR_RNDN);
        mpfr_add(r8355, r8348, r8347, MPFR_RNDN);
        mpfr_mul(r8356, r8355, r8352, MPFR_RNDN);
        mpfr_exp(r8357, r8356, MPFR_RNDN);
        mpfr_sub(r8358, r8349, r8347, MPFR_RNDN);
        mpfr_neg(r8359, r8358, MPFR_RNDN);
        mpfr_mul(r8360, r8357, r8359, MPFR_RNDN);
        mpfr_fma(r8361, r8350, r8354, r8360, MPFR_RNDN);
        mpfr_div(r8362, r8361, r8334, MPFR_RNDN);
        if (mpfr_get_si(r8333, MPFR_RNDN)) { mpfr_set(r8363, r8346, MPFR_RNDN); } else { mpfr_set(r8363, r8362, MPFR_RNDN); };
        return mpfr_get_d(r8363, MPFR_RNDN);
}

