#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 r7930 = 1.0f;
        float r7931 = eps;
        float r7932 = r7930 / r7931;
        float r7933 = r7930 + r7932;
        float r7934 = r7930 - r7931;
        float r7935 = x;
        float r7936 = r7934 * r7935;
        float r7937 = -r7936;
        float r7938 = exp(r7937);
        float r7939 = r7933 * r7938;
        float r7940 = r7932 - r7930;
        float r7941 = r7930 + r7931;
        float r7942 = r7941 * r7935;
        float r7943 = -r7942;
        float r7944 = exp(r7943);
        float r7945 = r7940 * r7944;
        float r7946 = r7939 - r7945;
        float r7947 = 2.0f;
        float r7948 = r7946 / r7947;
        return r7948;
}

double f_id(double x, double eps) {
        double r7949 = 1.0;
        double r7950 = eps;
        double r7951 = r7949 / r7950;
        double r7952 = r7949 + r7951;
        double r7953 = r7949 - r7950;
        double r7954 = x;
        double r7955 = r7953 * r7954;
        double r7956 = -r7955;
        double r7957 = exp(r7956);
        double r7958 = r7952 * r7957;
        double r7959 = r7951 - r7949;
        double r7960 = r7949 + r7950;
        double r7961 = r7960 * r7954;
        double r7962 = -r7961;
        double r7963 = exp(r7962);
        double r7964 = r7959 * r7963;
        double r7965 = r7958 - r7964;
        double r7966 = 2.0;
        double r7967 = r7965 / r7966;
        return r7967;
}


double f_of(float x, float eps) {
        float r7968 = x;
        float r7969 = 27.937358935982928f;
        bool r7970 = r7968 <= r7969;
        float r7971 = 2.0f;
        float r7972 = 0.6666666666666666f;
        float r7973 = 3.0f;
        float r7974 = pow(r7968, r7973);
        float r7975 = r7972 * r7974;
        float r7976 = r7971 + r7975;
        float r7977 = pow(r7968, r7971);
        float r7978 = r7976 - r7977;
        float r7979 = r7978 / r7971;
        float r7980 = 1.0f;
        float r7981 = eps;
        float r7982 = r7980 / r7981;
        float r7983 = r7982 + r7980;
        float r7984 = -r7968;
        float r7985 = r7980 - r7981;
        float r7986 = r7984 * r7985;
        float r7987 = exp(r7986);
        float r7988 = r7983 * r7987;
        float r7989 = r7980 + r7981;
        float r7990 = r7968 * r7989;
        float r7991 = exp(r7990);
        float r7992 = log(r7991);
        float r7993 = -r7992;
        float r7994 = exp(r7993);
        float r7995 = r7982 - r7980;
        float r7996 = r7994 * r7995;
        float r7997 = r7988 - r7996;
        float r7998 = r7997 / r7971;
        float r7999 = r7970 ? r7979 : r7998;
        return r7999;
}

double f_od(double x, double eps) {
        double r8000 = x;
        double r8001 = 27.937358935982928;
        bool r8002 = r8000 <= r8001;
        double r8003 = 2.0;
        double r8004 = 0.6666666666666666;
        double r8005 = 3.0;
        double r8006 = pow(r8000, r8005);
        double r8007 = r8004 * r8006;
        double r8008 = r8003 + r8007;
        double r8009 = pow(r8000, r8003);
        double r8010 = r8008 - r8009;
        double r8011 = r8010 / r8003;
        double r8012 = 1.0;
        double r8013 = eps;
        double r8014 = r8012 / r8013;
        double r8015 = r8014 + r8012;
        double r8016 = -r8000;
        double r8017 = r8012 - r8013;
        double r8018 = r8016 * r8017;
        double r8019 = exp(r8018);
        double r8020 = r8015 * r8019;
        double r8021 = r8012 + r8013;
        double r8022 = r8000 * r8021;
        double r8023 = exp(r8022);
        double r8024 = log(r8023);
        double r8025 = -r8024;
        double r8026 = exp(r8025);
        double r8027 = r8014 - r8012;
        double r8028 = r8026 * r8027;
        double r8029 = r8020 - r8028;
        double r8030 = r8029 / r8003;
        double r8031 = r8002 ? r8011 : r8030;
        return r8031;
}

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 r8032, r8033, r8034, r8035, r8036, r8037, r8038, r8039, r8040, r8041, r8042, r8043, r8044, r8045, r8046, r8047, r8048, r8049, r8050;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8032, "1", 10, MPFR_RNDN);
        mpfr_init(r8033);
        mpfr_init(r8034);
        mpfr_init(r8035);
        mpfr_init(r8036);
        mpfr_init(r8037);
        mpfr_init(r8038);
        mpfr_init(r8039);
        mpfr_init(r8040);
        mpfr_init(r8041);
        mpfr_init(r8042);
        mpfr_init(r8043);
        mpfr_init(r8044);
        mpfr_init(r8045);
        mpfr_init(r8046);
        mpfr_init(r8047);
        mpfr_init(r8048);
        mpfr_init_set_str(r8049, "2", 10, MPFR_RNDN);
        mpfr_init(r8050);
}

double f_im(double x, double eps) {
        ;
        mpfr_set_d(r8033, eps, MPFR_RNDN);
        mpfr_div(r8034, r8032, r8033, MPFR_RNDN);
        mpfr_add(r8035, r8032, r8034, MPFR_RNDN);
        mpfr_sub(r8036, r8032, r8033, MPFR_RNDN);
        mpfr_set_d(r8037, x, MPFR_RNDN);
        mpfr_mul(r8038, r8036, r8037, MPFR_RNDN);
        mpfr_neg(r8039, r8038, MPFR_RNDN);
        mpfr_exp(r8040, r8039, MPFR_RNDN);
        mpfr_mul(r8041, r8035, r8040, MPFR_RNDN);
        mpfr_sub(r8042, r8034, r8032, MPFR_RNDN);
        mpfr_add(r8043, r8032, r8033, MPFR_RNDN);
        mpfr_mul(r8044, r8043, r8037, MPFR_RNDN);
        mpfr_neg(r8045, r8044, MPFR_RNDN);
        mpfr_exp(r8046, r8045, MPFR_RNDN);
        mpfr_mul(r8047, r8042, r8046, MPFR_RNDN);
        mpfr_sub(r8048, r8041, r8047, MPFR_RNDN);
        ;
        mpfr_div(r8050, r8048, r8049, MPFR_RNDN);
        return mpfr_get_d(r8050, MPFR_RNDN);
}

static mpfr_t r8051, r8052, r8053, r8054, r8055, r8056, r8057, r8058, r8059, r8060, r8061, r8062, r8063, r8064, r8065, r8066, r8067, r8068, r8069, r8070, r8071, r8072, r8073, r8074, r8075, r8076, r8077, r8078, r8079, r8080, r8081, r8082;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8051);
        mpfr_init_set_str(r8052, "27.937358935982928", 10, MPFR_RNDN);
        mpfr_init(r8053);
        mpfr_init_set_str(r8054, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8055, "2/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r8056, "3", 10, MPFR_RNDN);
        mpfr_init(r8057);
        mpfr_init(r8058);
        mpfr_init(r8059);
        mpfr_init(r8060);
        mpfr_init(r8061);
        mpfr_init(r8062);
        mpfr_init_set_str(r8063, "1", 10, MPFR_RNDN);
        mpfr_init(r8064);
        mpfr_init(r8065);
        mpfr_init(r8066);
        mpfr_init(r8067);
        mpfr_init(r8068);
        mpfr_init(r8069);
        mpfr_init(r8070);
        mpfr_init(r8071);
        mpfr_init(r8072);
        mpfr_init(r8073);
        mpfr_init(r8074);
        mpfr_init(r8075);
        mpfr_init(r8076);
        mpfr_init(r8077);
        mpfr_init(r8078);
        mpfr_init(r8079);
        mpfr_init(r8080);
        mpfr_init(r8081);
        mpfr_init(r8082);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r8051, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8053, mpfr_cmp(r8051, r8052) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r8057, r8051, r8056, MPFR_RNDN);
        mpfr_mul(r8058, r8055, r8057, MPFR_RNDN);
        mpfr_add(r8059, r8054, r8058, MPFR_RNDN);
        mpfr_pow(r8060, r8051, r8054, MPFR_RNDN);
        mpfr_sub(r8061, r8059, r8060, MPFR_RNDN);
        mpfr_div(r8062, r8061, r8054, MPFR_RNDN);
        ;
        mpfr_set_d(r8064, eps, MPFR_RNDN);
        mpfr_div(r8065, r8063, r8064, MPFR_RNDN);
        mpfr_add(r8066, r8065, r8063, MPFR_RNDN);
        mpfr_neg(r8067, r8051, MPFR_RNDN);
        mpfr_sub(r8068, r8063, r8064, MPFR_RNDN);
        mpfr_mul(r8069, r8067, r8068, MPFR_RNDN);
        mpfr_exp(r8070, r8069, MPFR_RNDN);
        mpfr_mul(r8071, r8066, r8070, MPFR_RNDN);
        mpfr_add(r8072, r8063, r8064, MPFR_RNDN);
        mpfr_mul(r8073, r8051, r8072, MPFR_RNDN);
        mpfr_exp(r8074, r8073, MPFR_RNDN);
        mpfr_log(r8075, r8074, MPFR_RNDN);
        mpfr_neg(r8076, r8075, MPFR_RNDN);
        mpfr_exp(r8077, r8076, MPFR_RNDN);
        mpfr_sub(r8078, r8065, r8063, MPFR_RNDN);
        mpfr_mul(r8079, r8077, r8078, MPFR_RNDN);
        mpfr_sub(r8080, r8071, r8079, MPFR_RNDN);
        mpfr_div(r8081, r8080, r8054, MPFR_RNDN);
        if (mpfr_get_si(r8053, MPFR_RNDN)) { mpfr_set(r8082, r8062, MPFR_RNDN); } else { mpfr_set(r8082, r8081, MPFR_RNDN); };
        return mpfr_get_d(r8082, MPFR_RNDN);
}

static mpfr_t r8083, r8084, r8085, r8086, r8087, r8088, r8089, r8090, r8091, r8092, r8093, r8094, r8095, r8096, r8097, r8098, r8099, r8100, r8101, r8102, r8103, r8104, r8105, r8106, r8107, r8108, r8109, r8110, r8111, r8112, r8113, r8114;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8083);
        mpfr_init_set_str(r8084, "27.937358935982928", 10, MPFR_RNDN);
        mpfr_init(r8085);
        mpfr_init_set_str(r8086, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8087, "2/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r8088, "3", 10, MPFR_RNDN);
        mpfr_init(r8089);
        mpfr_init(r8090);
        mpfr_init(r8091);
        mpfr_init(r8092);
        mpfr_init(r8093);
        mpfr_init(r8094);
        mpfr_init_set_str(r8095, "1", 10, MPFR_RNDN);
        mpfr_init(r8096);
        mpfr_init(r8097);
        mpfr_init(r8098);
        mpfr_init(r8099);
        mpfr_init(r8100);
        mpfr_init(r8101);
        mpfr_init(r8102);
        mpfr_init(r8103);
        mpfr_init(r8104);
        mpfr_init(r8105);
        mpfr_init(r8106);
        mpfr_init(r8107);
        mpfr_init(r8108);
        mpfr_init(r8109);
        mpfr_init(r8110);
        mpfr_init(r8111);
        mpfr_init(r8112);
        mpfr_init(r8113);
        mpfr_init(r8114);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r8083, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8085, mpfr_cmp(r8083, r8084) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r8089, r8083, r8088, MPFR_RNDN);
        mpfr_mul(r8090, r8087, r8089, MPFR_RNDN);
        mpfr_add(r8091, r8086, r8090, MPFR_RNDN);
        mpfr_pow(r8092, r8083, r8086, MPFR_RNDN);
        mpfr_sub(r8093, r8091, r8092, MPFR_RNDN);
        mpfr_div(r8094, r8093, r8086, MPFR_RNDN);
        ;
        mpfr_set_d(r8096, eps, MPFR_RNDN);
        mpfr_div(r8097, r8095, r8096, MPFR_RNDN);
        mpfr_add(r8098, r8097, r8095, MPFR_RNDN);
        mpfr_neg(r8099, r8083, MPFR_RNDN);
        mpfr_sub(r8100, r8095, r8096, MPFR_RNDN);
        mpfr_mul(r8101, r8099, r8100, MPFR_RNDN);
        mpfr_exp(r8102, r8101, MPFR_RNDN);
        mpfr_mul(r8103, r8098, r8102, MPFR_RNDN);
        mpfr_add(r8104, r8095, r8096, MPFR_RNDN);
        mpfr_mul(r8105, r8083, r8104, MPFR_RNDN);
        mpfr_exp(r8106, r8105, MPFR_RNDN);
        mpfr_log(r8107, r8106, MPFR_RNDN);
        mpfr_neg(r8108, r8107, MPFR_RNDN);
        mpfr_exp(r8109, r8108, MPFR_RNDN);
        mpfr_sub(r8110, r8097, r8095, MPFR_RNDN);
        mpfr_mul(r8111, r8109, r8110, MPFR_RNDN);
        mpfr_sub(r8112, r8103, r8111, MPFR_RNDN);
        mpfr_div(r8113, r8112, r8086, MPFR_RNDN);
        if (mpfr_get_si(r8085, MPFR_RNDN)) { mpfr_set(r8114, r8094, MPFR_RNDN); } else { mpfr_set(r8114, r8113, MPFR_RNDN); };
        return mpfr_get_d(r8114, MPFR_RNDN);
}

