#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 r8811 = 1;
        float r8812 = eps;
        float r8813 = r8811 / r8812;
        float r8814 = r8811 + r8813;
        float r8815 = r8811 - r8812;
        float r8816 = x;
        float r8817 = r8815 * r8816;
        float r8818 = -r8817;
        float r8819 = exp(r8818);
        float r8820 = r8814 * r8819;
        float r8821 = r8813 - r8811;
        float r8822 = r8811 + r8812;
        float r8823 = r8822 * r8816;
        float r8824 = -r8823;
        float r8825 = exp(r8824);
        float r8826 = r8821 * r8825;
        float r8827 = r8820 - r8826;
        float r8828 = 2;
        float r8829 = r8827 / r8828;
        return r8829;
}

double f_id(double x, double eps) {
        double r8830 = 1;
        double r8831 = eps;
        double r8832 = r8830 / r8831;
        double r8833 = r8830 + r8832;
        double r8834 = r8830 - r8831;
        double r8835 = x;
        double r8836 = r8834 * r8835;
        double r8837 = -r8836;
        double r8838 = exp(r8837);
        double r8839 = r8833 * r8838;
        double r8840 = r8832 - r8830;
        double r8841 = r8830 + r8831;
        double r8842 = r8841 * r8835;
        double r8843 = -r8842;
        double r8844 = exp(r8843);
        double r8845 = r8840 * r8844;
        double r8846 = r8839 - r8845;
        double r8847 = 2;
        double r8848 = r8846 / r8847;
        return r8848;
}


double f_of(float x, float eps) {
        float r8849 = x;
        float r8850 = 391.2622826264862;
        bool r8851 = r8849 <= r8850;
        float r8852 = 2/3;
        float r8853 = 3;
        float r8854 = pow(r8849, r8853);
        float r8855 = r8852 * r8854;
        float r8856 = 2;
        float r8857 = r8855 + r8856;
        float r8858 = pow(r8857, r8853);
        float r8859 = pow(r8849, r8856);
        float r8860 = pow(r8859, r8853);
        float r8861 = r8858 - r8860;
        float r8862 = r8849 * r8849;
        float r8863 = r8862 * r8862;
        float r8864 = r8849 * r8852;
        float r8865 = r8862 * r8864;
        float r8866 = r8862 + r8856;
        float r8867 = r8865 + r8866;
        float r8868 = cbrt(r8864);
        float r8869 = r8868 * r8868;
        float r8870 = cbrt(r8868);
        float r8871 = r8870 * r8870;
        float r8872 = r8871 * r8870;
        float r8873 = r8869 * r8872;
        float r8874 = r8862 * r8873;
        float r8875 = r8856 + r8874;
        float r8876 = r8867 * r8875;
        float r8877 = r8863 + r8876;
        float r8878 = r8861 / r8877;
        float r8879 = r8878 / r8856;
        float r8880 = 1;
        float r8881 = eps;
        float r8882 = r8880 / r8881;
        float r8883 = r8880 + r8882;
        float r8884 = r8880 - r8881;
        float r8885 = r8884 * r8849;
        float r8886 = -r8885;
        float r8887 = exp(r8886);
        float r8888 = r8883 * r8887;
        float r8889 = r8882 - r8880;
        float r8890 = exp(1.0);
        float r8891 = r8880 + r8881;
        float r8892 = r8891 * r8849;
        float r8893 = -r8892;
        float r8894 = pow(r8890, r8893);
        float r8895 = r8889 * r8894;
        float r8896 = r8888 - r8895;
        float r8897 = r8896 / r8856;
        float r8898 = r8851 ? r8879 : r8897;
        return r8898;
}

double f_od(double x, double eps) {
        double r8899 = x;
        double r8900 = 391.2622826264862;
        bool r8901 = r8899 <= r8900;
        double r8902 = 2/3;
        double r8903 = 3;
        double r8904 = pow(r8899, r8903);
        double r8905 = r8902 * r8904;
        double r8906 = 2;
        double r8907 = r8905 + r8906;
        double r8908 = pow(r8907, r8903);
        double r8909 = pow(r8899, r8906);
        double r8910 = pow(r8909, r8903);
        double r8911 = r8908 - r8910;
        double r8912 = r8899 * r8899;
        double r8913 = r8912 * r8912;
        double r8914 = r8899 * r8902;
        double r8915 = r8912 * r8914;
        double r8916 = r8912 + r8906;
        double r8917 = r8915 + r8916;
        double r8918 = cbrt(r8914);
        double r8919 = r8918 * r8918;
        double r8920 = cbrt(r8918);
        double r8921 = r8920 * r8920;
        double r8922 = r8921 * r8920;
        double r8923 = r8919 * r8922;
        double r8924 = r8912 * r8923;
        double r8925 = r8906 + r8924;
        double r8926 = r8917 * r8925;
        double r8927 = r8913 + r8926;
        double r8928 = r8911 / r8927;
        double r8929 = r8928 / r8906;
        double r8930 = 1;
        double r8931 = eps;
        double r8932 = r8930 / r8931;
        double r8933 = r8930 + r8932;
        double r8934 = r8930 - r8931;
        double r8935 = r8934 * r8899;
        double r8936 = -r8935;
        double r8937 = exp(r8936);
        double r8938 = r8933 * r8937;
        double r8939 = r8932 - r8930;
        double r8940 = exp(1.0);
        double r8941 = r8930 + r8931;
        double r8942 = r8941 * r8899;
        double r8943 = -r8942;
        double r8944 = pow(r8940, r8943);
        double r8945 = r8939 * r8944;
        double r8946 = r8938 - r8945;
        double r8947 = r8946 / r8906;
        double r8948 = r8901 ? r8929 : r8947;
        return r8948;
}

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 r8949, r8950, r8951, r8952, r8953, r8954, r8955, r8956, r8957, r8958, r8959, r8960, r8961, r8962, r8963, r8964, r8965, r8966, r8967;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8949, "1", 10, MPFR_RNDN);
        mpfr_init(r8950);
        mpfr_init(r8951);
        mpfr_init(r8952);
        mpfr_init(r8953);
        mpfr_init(r8954);
        mpfr_init(r8955);
        mpfr_init(r8956);
        mpfr_init(r8957);
        mpfr_init(r8958);
        mpfr_init(r8959);
        mpfr_init(r8960);
        mpfr_init(r8961);
        mpfr_init(r8962);
        mpfr_init(r8963);
        mpfr_init(r8964);
        mpfr_init(r8965);
        mpfr_init_set_str(r8966, "2", 10, MPFR_RNDN);
        mpfr_init(r8967);
}

double f_im(double x, double eps) {
        ;
        mpfr_set_d(r8950, eps, MPFR_RNDN);
        mpfr_div(r8951, r8949, r8950, MPFR_RNDN);
        mpfr_add(r8952, r8949, r8951, MPFR_RNDN);
        mpfr_sub(r8953, r8949, r8950, MPFR_RNDN);
        mpfr_set_d(r8954, x, MPFR_RNDN);
        mpfr_mul(r8955, r8953, r8954, MPFR_RNDN);
        mpfr_neg(r8956, r8955, MPFR_RNDN);
        mpfr_exp(r8957, r8956, MPFR_RNDN);
        mpfr_mul(r8958, r8952, r8957, MPFR_RNDN);
        mpfr_sub(r8959, r8951, r8949, MPFR_RNDN);
        mpfr_add(r8960, r8949, r8950, MPFR_RNDN);
        mpfr_mul(r8961, r8960, r8954, MPFR_RNDN);
        mpfr_neg(r8962, r8961, MPFR_RNDN);
        mpfr_exp(r8963, r8962, MPFR_RNDN);
        mpfr_mul(r8964, r8959, r8963, MPFR_RNDN);
        mpfr_sub(r8965, r8958, r8964, MPFR_RNDN);
        ;
        mpfr_div(r8967, r8965, r8966, MPFR_RNDN);
        return mpfr_get_d(r8967, MPFR_RNDN);
}

static mpfr_t r8968, r8969, r8970, r8971, r8972, r8973, r8974, r8975, r8976, r8977, r8978, r8979, r8980, r8981, r8982, r8983, r8984, r8985, r8986, r8987, r8988, r8989, r8990, r8991, r8992, r8993, r8994, r8995, r8996, r8997, r8998, r8999, r9000, r9001, r9002, r9003, r9004, r9005, r9006, r9007, r9008, r9009, r9010, r9011, r9012, r9013, r9014, r9015, r9016, r9017;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8968);
        mpfr_init_set_str(r8969, "391.2622826264862", 10, MPFR_RNDN);
        mpfr_init(r8970);
        mpfr_init_set_str(r8971, "2/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r8972, "3", 10, MPFR_RNDN);
        mpfr_init(r8973);
        mpfr_init(r8974);
        mpfr_init_set_str(r8975, "2", 10, MPFR_RNDN);
        mpfr_init(r8976);
        mpfr_init(r8977);
        mpfr_init(r8978);
        mpfr_init(r8979);
        mpfr_init(r8980);
        mpfr_init(r8981);
        mpfr_init(r8982);
        mpfr_init(r8983);
        mpfr_init(r8984);
        mpfr_init(r8985);
        mpfr_init(r8986);
        mpfr_init(r8987);
        mpfr_init(r8988);
        mpfr_init(r8989);
        mpfr_init(r8990);
        mpfr_init(r8991);
        mpfr_init(r8992);
        mpfr_init(r8993);
        mpfr_init(r8994);
        mpfr_init(r8995);
        mpfr_init(r8996);
        mpfr_init(r8997);
        mpfr_init(r8998);
        mpfr_init_set_str(r8999, "1", 10, MPFR_RNDN);
        mpfr_init(r9000);
        mpfr_init(r9001);
        mpfr_init(r9002);
        mpfr_init(r9003);
        mpfr_init(r9004);
        mpfr_init(r9005);
        mpfr_init(r9006);
        mpfr_init(r9007);
        mpfr_init(r9008);
        mpfr_init(r9009);
        mpfr_init(r9010);
        mpfr_init(r9011);
        mpfr_init(r9012);
        mpfr_init(r9013);
        mpfr_init(r9014);
        mpfr_init(r9015);
        mpfr_init(r9016);
        mpfr_init(r9017);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r8968, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8970, mpfr_cmp(r8968, r8969) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8973, r8968, r8972, MPFR_RNDN);
        mpfr_mul(r8974, r8971, r8973, MPFR_RNDN);
        ;
        mpfr_add(r8976, r8974, r8975, MPFR_RNDN);
        mpfr_pow(r8977, r8976, r8972, MPFR_RNDN);
        mpfr_pow(r8978, r8968, r8975, MPFR_RNDN);
        mpfr_pow(r8979, r8978, r8972, MPFR_RNDN);
        mpfr_sub(r8980, r8977, r8979, MPFR_RNDN);
        mpfr_mul(r8981, r8968, r8968, MPFR_RNDN);
        mpfr_mul(r8982, r8981, r8981, MPFR_RNDN);
        mpfr_mul(r8983, r8968, r8971, MPFR_RNDN);
        mpfr_mul(r8984, r8981, r8983, MPFR_RNDN);
        mpfr_add(r8985, r8981, r8975, MPFR_RNDN);
        mpfr_add(r8986, r8984, r8985, MPFR_RNDN);
        mpfr_cbrt(r8987, r8983, MPFR_RNDN);
        mpfr_mul(r8988, r8987, r8987, MPFR_RNDN);
        mpfr_cbrt(r8989, r8987, MPFR_RNDN);
        mpfr_mul(r8990, r8989, r8989, MPFR_RNDN);
        mpfr_mul(r8991, r8990, r8989, MPFR_RNDN);
        mpfr_mul(r8992, r8988, r8991, MPFR_RNDN);
        mpfr_mul(r8993, r8981, r8992, MPFR_RNDN);
        mpfr_add(r8994, r8975, r8993, MPFR_RNDN);
        mpfr_mul(r8995, r8986, r8994, MPFR_RNDN);
        mpfr_add(r8996, r8982, r8995, MPFR_RNDN);
        mpfr_div(r8997, r8980, r8996, MPFR_RNDN);
        mpfr_div(r8998, r8997, r8975, MPFR_RNDN);
        ;
        mpfr_set_d(r9000, eps, MPFR_RNDN);
        mpfr_div(r9001, r8999, r9000, MPFR_RNDN);
        mpfr_add(r9002, r8999, r9001, MPFR_RNDN);
        mpfr_sub(r9003, r8999, r9000, MPFR_RNDN);
        mpfr_mul(r9004, r9003, r8968, MPFR_RNDN);
        mpfr_neg(r9005, r9004, MPFR_RNDN);
        mpfr_exp(r9006, r9005, MPFR_RNDN);
        mpfr_mul(r9007, r9002, r9006, MPFR_RNDN);
        mpfr_sub(r9008, r9001, r8999, MPFR_RNDN);
        mpfr_set_si(r9009, 1, MPFR_RNDN), mpfr_const_exp(r9009, r9009, MPFR_RNDN);
        mpfr_add(r9010, r8999, r9000, MPFR_RNDN);
        mpfr_mul(r9011, r9010, r8968, MPFR_RNDN);
        mpfr_neg(r9012, r9011, MPFR_RNDN);
        mpfr_pow(r9013, r9009, r9012, MPFR_RNDN);
        mpfr_mul(r9014, r9008, r9013, MPFR_RNDN);
        mpfr_sub(r9015, r9007, r9014, MPFR_RNDN);
        mpfr_div(r9016, r9015, r8975, MPFR_RNDN);
        if (mpfr_get_si(r8970, MPFR_RNDN)) { mpfr_set(r9017, r8998, MPFR_RNDN); } else { mpfr_set(r9017, r9016, MPFR_RNDN); };
        return mpfr_get_d(r9017, MPFR_RNDN);
}

static mpfr_t r9018, r9019, r9020, r9021, r9022, r9023, r9024, r9025, r9026, r9027, r9028, r9029, r9030, r9031, r9032, r9033, r9034, r9035, r9036, r9037, r9038, r9039, r9040, r9041, r9042, r9043, r9044, r9045, r9046, r9047, r9048, r9049, r9050, r9051, r9052, r9053, r9054, r9055, r9056, r9057, r9058, r9059, r9060, r9061, r9062, r9063, r9064, r9065, r9066, r9067;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9018);
        mpfr_init_set_str(r9019, "391.2622826264862", 10, MPFR_RNDN);
        mpfr_init(r9020);
        mpfr_init_set_str(r9021, "2/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r9022, "3", 10, MPFR_RNDN);
        mpfr_init(r9023);
        mpfr_init(r9024);
        mpfr_init_set_str(r9025, "2", 10, MPFR_RNDN);
        mpfr_init(r9026);
        mpfr_init(r9027);
        mpfr_init(r9028);
        mpfr_init(r9029);
        mpfr_init(r9030);
        mpfr_init(r9031);
        mpfr_init(r9032);
        mpfr_init(r9033);
        mpfr_init(r9034);
        mpfr_init(r9035);
        mpfr_init(r9036);
        mpfr_init(r9037);
        mpfr_init(r9038);
        mpfr_init(r9039);
        mpfr_init(r9040);
        mpfr_init(r9041);
        mpfr_init(r9042);
        mpfr_init(r9043);
        mpfr_init(r9044);
        mpfr_init(r9045);
        mpfr_init(r9046);
        mpfr_init(r9047);
        mpfr_init(r9048);
        mpfr_init_set_str(r9049, "1", 10, MPFR_RNDN);
        mpfr_init(r9050);
        mpfr_init(r9051);
        mpfr_init(r9052);
        mpfr_init(r9053);
        mpfr_init(r9054);
        mpfr_init(r9055);
        mpfr_init(r9056);
        mpfr_init(r9057);
        mpfr_init(r9058);
        mpfr_init(r9059);
        mpfr_init(r9060);
        mpfr_init(r9061);
        mpfr_init(r9062);
        mpfr_init(r9063);
        mpfr_init(r9064);
        mpfr_init(r9065);
        mpfr_init(r9066);
        mpfr_init(r9067);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r9018, x, MPFR_RNDN);
        ;
        mpfr_set_si(r9020, mpfr_cmp(r9018, r9019) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r9023, r9018, r9022, MPFR_RNDN);
        mpfr_mul(r9024, r9021, r9023, MPFR_RNDN);
        ;
        mpfr_add(r9026, r9024, r9025, MPFR_RNDN);
        mpfr_pow(r9027, r9026, r9022, MPFR_RNDN);
        mpfr_pow(r9028, r9018, r9025, MPFR_RNDN);
        mpfr_pow(r9029, r9028, r9022, MPFR_RNDN);
        mpfr_sub(r9030, r9027, r9029, MPFR_RNDN);
        mpfr_mul(r9031, r9018, r9018, MPFR_RNDN);
        mpfr_mul(r9032, r9031, r9031, MPFR_RNDN);
        mpfr_mul(r9033, r9018, r9021, MPFR_RNDN);
        mpfr_mul(r9034, r9031, r9033, MPFR_RNDN);
        mpfr_add(r9035, r9031, r9025, MPFR_RNDN);
        mpfr_add(r9036, r9034, r9035, MPFR_RNDN);
        mpfr_cbrt(r9037, r9033, MPFR_RNDN);
        mpfr_mul(r9038, r9037, r9037, MPFR_RNDN);
        mpfr_cbrt(r9039, r9037, MPFR_RNDN);
        mpfr_mul(r9040, r9039, r9039, MPFR_RNDN);
        mpfr_mul(r9041, r9040, r9039, MPFR_RNDN);
        mpfr_mul(r9042, r9038, r9041, MPFR_RNDN);
        mpfr_mul(r9043, r9031, r9042, MPFR_RNDN);
        mpfr_add(r9044, r9025, r9043, MPFR_RNDN);
        mpfr_mul(r9045, r9036, r9044, MPFR_RNDN);
        mpfr_add(r9046, r9032, r9045, MPFR_RNDN);
        mpfr_div(r9047, r9030, r9046, MPFR_RNDN);
        mpfr_div(r9048, r9047, r9025, MPFR_RNDN);
        ;
        mpfr_set_d(r9050, eps, MPFR_RNDN);
        mpfr_div(r9051, r9049, r9050, MPFR_RNDN);
        mpfr_add(r9052, r9049, r9051, MPFR_RNDN);
        mpfr_sub(r9053, r9049, r9050, MPFR_RNDN);
        mpfr_mul(r9054, r9053, r9018, MPFR_RNDN);
        mpfr_neg(r9055, r9054, MPFR_RNDN);
        mpfr_exp(r9056, r9055, MPFR_RNDN);
        mpfr_mul(r9057, r9052, r9056, MPFR_RNDN);
        mpfr_sub(r9058, r9051, r9049, MPFR_RNDN);
        mpfr_set_si(r9059, 1, MPFR_RNDN), mpfr_const_exp(r9059, r9059, MPFR_RNDN);
        mpfr_add(r9060, r9049, r9050, MPFR_RNDN);
        mpfr_mul(r9061, r9060, r9018, MPFR_RNDN);
        mpfr_neg(r9062, r9061, MPFR_RNDN);
        mpfr_pow(r9063, r9059, r9062, MPFR_RNDN);
        mpfr_mul(r9064, r9058, r9063, MPFR_RNDN);
        mpfr_sub(r9065, r9057, r9064, MPFR_RNDN);
        mpfr_div(r9066, r9065, r9025, MPFR_RNDN);
        if (mpfr_get_si(r9020, MPFR_RNDN)) { mpfr_set(r9067, r9048, MPFR_RNDN); } else { mpfr_set(r9067, r9066, MPFR_RNDN); };
        return mpfr_get_d(r9067, MPFR_RNDN);
}

