#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 r8732 = 1;
        float r8733 = eps;
        float r8734 = r8732 / r8733;
        float r8735 = r8732 + r8734;
        float r8736 = r8732 - r8733;
        float r8737 = x;
        float r8738 = r8736 * r8737;
        float r8739 = -r8738;
        float r8740 = exp(r8739);
        float r8741 = r8735 * r8740;
        float r8742 = r8734 - r8732;
        float r8743 = r8732 + r8733;
        float r8744 = r8743 * r8737;
        float r8745 = -r8744;
        float r8746 = exp(r8745);
        float r8747 = r8742 * r8746;
        float r8748 = r8741 - r8747;
        float r8749 = 2;
        float r8750 = r8748 / r8749;
        return r8750;
}

double f_id(double x, double eps) {
        double r8751 = 1;
        double r8752 = eps;
        double r8753 = r8751 / r8752;
        double r8754 = r8751 + r8753;
        double r8755 = r8751 - r8752;
        double r8756 = x;
        double r8757 = r8755 * r8756;
        double r8758 = -r8757;
        double r8759 = exp(r8758);
        double r8760 = r8754 * r8759;
        double r8761 = r8753 - r8751;
        double r8762 = r8751 + r8752;
        double r8763 = r8762 * r8756;
        double r8764 = -r8763;
        double r8765 = exp(r8764);
        double r8766 = r8761 * r8765;
        double r8767 = r8760 - r8766;
        double r8768 = 2;
        double r8769 = r8767 / r8768;
        return r8769;
}


double f_of(float x, float eps) {
        float r8770 = x;
        float r8771 = exp(r8770);
        float r8772 = eps;
        float r8773 = 1;
        float r8774 = r8772 - r8773;
        float r8775 = pow(r8771, r8774);
        float r8776 = r8773 / r8772;
        float r8777 = r8773 + r8776;
        float r8778 = fma(r8775, r8777, r8773);
        float r8779 = r8776 - r8773;
        float r8780 = fma(r8770, r8772, r8770);
        float r8781 = exp(r8780);
        float r8782 = r8779 / r8781;
        float r8783 = r8778 - r8782;
        float r8784 = log(r8783);
        float r8785 = expm1(r8784);
        float r8786 = 2;
        float r8787 = r8785 / r8786;
        float r8788 = -1.4935731958935078e-17;
        bool r8789 = r8787 <= r8788;
        float r8790 = r8770 / r8772;
        float r8791 = r8773 - r8770;
        float r8792 = r8790 + r8791;
        float r8793 = r8773 - r8772;
        float r8794 = r8793 * r8770;
        float r8795 = -r8794;
        float r8796 = exp(r8795);
        float r8797 = r8773 - r8776;
        float r8798 = r8797 / r8781;
        float r8799 = sqrt(r8798);
        float r8800 = r8799 * r8799;
        float r8801 = fma(r8777, r8796, r8800);
        float r8802 = r8801 / r8786;
        float r8803 = r8789 ? r8792 : r8802;
        return r8803;
}

double f_od(double x, double eps) {
        double r8804 = x;
        double r8805 = exp(r8804);
        double r8806 = eps;
        double r8807 = 1;
        double r8808 = r8806 - r8807;
        double r8809 = pow(r8805, r8808);
        double r8810 = r8807 / r8806;
        double r8811 = r8807 + r8810;
        double r8812 = fma(r8809, r8811, r8807);
        double r8813 = r8810 - r8807;
        double r8814 = fma(r8804, r8806, r8804);
        double r8815 = exp(r8814);
        double r8816 = r8813 / r8815;
        double r8817 = r8812 - r8816;
        double r8818 = log(r8817);
        double r8819 = expm1(r8818);
        double r8820 = 2;
        double r8821 = r8819 / r8820;
        double r8822 = -1.4935731958935078e-17;
        bool r8823 = r8821 <= r8822;
        double r8824 = r8804 / r8806;
        double r8825 = r8807 - r8804;
        double r8826 = r8824 + r8825;
        double r8827 = r8807 - r8806;
        double r8828 = r8827 * r8804;
        double r8829 = -r8828;
        double r8830 = exp(r8829);
        double r8831 = r8807 - r8810;
        double r8832 = r8831 / r8815;
        double r8833 = sqrt(r8832);
        double r8834 = r8833 * r8833;
        double r8835 = fma(r8811, r8830, r8834);
        double r8836 = r8835 / r8820;
        double r8837 = r8823 ? r8826 : r8836;
        return r8837;
}

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 r8838, r8839, r8840, r8841, r8842, r8843, r8844, r8845, r8846, r8847, r8848, r8849, r8850, r8851, r8852, r8853, r8854, r8855, r8856;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8838, "1", 10, MPFR_RNDN);
        mpfr_init(r8839);
        mpfr_init(r8840);
        mpfr_init(r8841);
        mpfr_init(r8842);
        mpfr_init(r8843);
        mpfr_init(r8844);
        mpfr_init(r8845);
        mpfr_init(r8846);
        mpfr_init(r8847);
        mpfr_init(r8848);
        mpfr_init(r8849);
        mpfr_init(r8850);
        mpfr_init(r8851);
        mpfr_init(r8852);
        mpfr_init(r8853);
        mpfr_init(r8854);
        mpfr_init_set_str(r8855, "2", 10, MPFR_RNDN);
        mpfr_init(r8856);
}

double f_im(double x, double eps) {
        ;
        mpfr_set_d(r8839, eps, MPFR_RNDN);
        mpfr_div(r8840, r8838, r8839, MPFR_RNDN);
        mpfr_add(r8841, r8838, r8840, MPFR_RNDN);
        mpfr_sub(r8842, r8838, r8839, MPFR_RNDN);
        mpfr_set_d(r8843, x, MPFR_RNDN);
        mpfr_mul(r8844, r8842, r8843, MPFR_RNDN);
        mpfr_neg(r8845, r8844, MPFR_RNDN);
        mpfr_exp(r8846, r8845, MPFR_RNDN);
        mpfr_mul(r8847, r8841, r8846, MPFR_RNDN);
        mpfr_sub(r8848, r8840, r8838, MPFR_RNDN);
        mpfr_add(r8849, r8838, r8839, MPFR_RNDN);
        mpfr_mul(r8850, r8849, r8843, MPFR_RNDN);
        mpfr_neg(r8851, r8850, MPFR_RNDN);
        mpfr_exp(r8852, r8851, MPFR_RNDN);
        mpfr_mul(r8853, r8848, r8852, MPFR_RNDN);
        mpfr_sub(r8854, r8847, r8853, MPFR_RNDN);
        ;
        mpfr_div(r8856, r8854, r8855, MPFR_RNDN);
        return mpfr_get_d(r8856, MPFR_RNDN);
}

static mpfr_t r8857, r8858, r8859, r8860, r8861, r8862, r8863, r8864, r8865, r8866, r8867, r8868, r8869, r8870, r8871, r8872, r8873, r8874, r8875, r8876, r8877, r8878, r8879, r8880, r8881, r8882, r8883, r8884, r8885, r8886, r8887, r8888, r8889, r8890;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8857);
        mpfr_init(r8858);
        mpfr_init(r8859);
        mpfr_init_set_str(r8860, "1", 10, MPFR_RNDN);
        mpfr_init(r8861);
        mpfr_init(r8862);
        mpfr_init(r8863);
        mpfr_init(r8864);
        mpfr_init(r8865);
        mpfr_init(r8866);
        mpfr_init(r8867);
        mpfr_init(r8868);
        mpfr_init(r8869);
        mpfr_init(r8870);
        mpfr_init(r8871);
        mpfr_init(r8872);
        mpfr_init_set_str(r8873, "2", 10, MPFR_RNDN);
        mpfr_init(r8874);
        mpfr_init_set_str(r8875, "-1.4935731958935078e-17", 10, MPFR_RNDN);
        mpfr_init(r8876);
        mpfr_init(r8877);
        mpfr_init(r8878);
        mpfr_init(r8879);
        mpfr_init(r8880);
        mpfr_init(r8881);
        mpfr_init(r8882);
        mpfr_init(r8883);
        mpfr_init(r8884);
        mpfr_init(r8885);
        mpfr_init(r8886);
        mpfr_init(r8887);
        mpfr_init(r8888);
        mpfr_init(r8889);
        mpfr_init(r8890);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r8857, x, MPFR_RNDN);
        mpfr_exp(r8858, r8857, MPFR_RNDN);
        mpfr_set_d(r8859, eps, MPFR_RNDN);
        ;
        mpfr_sub(r8861, r8859, r8860, MPFR_RNDN);
        mpfr_pow(r8862, r8858, r8861, MPFR_RNDN);
        mpfr_div(r8863, r8860, r8859, MPFR_RNDN);
        mpfr_add(r8864, r8860, r8863, MPFR_RNDN);
        mpfr_fma(r8865, r8862, r8864, r8860, MPFR_RNDN);
        mpfr_sub(r8866, r8863, r8860, MPFR_RNDN);
        mpfr_fma(r8867, r8857, r8859, r8857, MPFR_RNDN);
        mpfr_exp(r8868, r8867, MPFR_RNDN);
        mpfr_div(r8869, r8866, r8868, MPFR_RNDN);
        mpfr_sub(r8870, r8865, r8869, MPFR_RNDN);
        mpfr_log(r8871, r8870, MPFR_RNDN);
        mpfr_expm1(r8872, r8871, MPFR_RNDN);
        ;
        mpfr_div(r8874, r8872, r8873, MPFR_RNDN);
        ;
        mpfr_set_si(r8876, mpfr_cmp(r8874, r8875) <= 0, MPFR_RNDN);
        mpfr_div(r8877, r8857, r8859, MPFR_RNDN);
        mpfr_sub(r8878, r8860, r8857, MPFR_RNDN);
        mpfr_add(r8879, r8877, r8878, MPFR_RNDN);
        mpfr_sub(r8880, r8860, r8859, MPFR_RNDN);
        mpfr_mul(r8881, r8880, r8857, MPFR_RNDN);
        mpfr_neg(r8882, r8881, MPFR_RNDN);
        mpfr_exp(r8883, r8882, MPFR_RNDN);
        mpfr_sub(r8884, r8860, r8863, MPFR_RNDN);
        mpfr_div(r8885, r8884, r8868, MPFR_RNDN);
        mpfr_sqrt(r8886, r8885, MPFR_RNDN);
        mpfr_mul(r8887, r8886, r8886, MPFR_RNDN);
        mpfr_fma(r8888, r8864, r8883, r8887, MPFR_RNDN);
        mpfr_div(r8889, r8888, r8873, MPFR_RNDN);
        if (mpfr_get_si(r8876, MPFR_RNDN)) { mpfr_set(r8890, r8879, MPFR_RNDN); } else { mpfr_set(r8890, r8889, MPFR_RNDN); };
        return mpfr_get_d(r8890, MPFR_RNDN);
}

static mpfr_t r8891, r8892, r8893, r8894, r8895, r8896, r8897, r8898, r8899, r8900, r8901, r8902, r8903, r8904, r8905, r8906, r8907, r8908, r8909, r8910, r8911, r8912, r8913, r8914, r8915, r8916, r8917, r8918, r8919, r8920, r8921, r8922, r8923, r8924;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8891);
        mpfr_init(r8892);
        mpfr_init(r8893);
        mpfr_init_set_str(r8894, "1", 10, MPFR_RNDN);
        mpfr_init(r8895);
        mpfr_init(r8896);
        mpfr_init(r8897);
        mpfr_init(r8898);
        mpfr_init(r8899);
        mpfr_init(r8900);
        mpfr_init(r8901);
        mpfr_init(r8902);
        mpfr_init(r8903);
        mpfr_init(r8904);
        mpfr_init(r8905);
        mpfr_init(r8906);
        mpfr_init_set_str(r8907, "2", 10, MPFR_RNDN);
        mpfr_init(r8908);
        mpfr_init_set_str(r8909, "-1.4935731958935078e-17", 10, MPFR_RNDN);
        mpfr_init(r8910);
        mpfr_init(r8911);
        mpfr_init(r8912);
        mpfr_init(r8913);
        mpfr_init(r8914);
        mpfr_init(r8915);
        mpfr_init(r8916);
        mpfr_init(r8917);
        mpfr_init(r8918);
        mpfr_init(r8919);
        mpfr_init(r8920);
        mpfr_init(r8921);
        mpfr_init(r8922);
        mpfr_init(r8923);
        mpfr_init(r8924);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r8891, x, MPFR_RNDN);
        mpfr_exp(r8892, r8891, MPFR_RNDN);
        mpfr_set_d(r8893, eps, MPFR_RNDN);
        ;
        mpfr_sub(r8895, r8893, r8894, MPFR_RNDN);
        mpfr_pow(r8896, r8892, r8895, MPFR_RNDN);
        mpfr_div(r8897, r8894, r8893, MPFR_RNDN);
        mpfr_add(r8898, r8894, r8897, MPFR_RNDN);
        mpfr_fma(r8899, r8896, r8898, r8894, MPFR_RNDN);
        mpfr_sub(r8900, r8897, r8894, MPFR_RNDN);
        mpfr_fma(r8901, r8891, r8893, r8891, MPFR_RNDN);
        mpfr_exp(r8902, r8901, MPFR_RNDN);
        mpfr_div(r8903, r8900, r8902, MPFR_RNDN);
        mpfr_sub(r8904, r8899, r8903, MPFR_RNDN);
        mpfr_log(r8905, r8904, MPFR_RNDN);
        mpfr_expm1(r8906, r8905, MPFR_RNDN);
        ;
        mpfr_div(r8908, r8906, r8907, MPFR_RNDN);
        ;
        mpfr_set_si(r8910, mpfr_cmp(r8908, r8909) <= 0, MPFR_RNDN);
        mpfr_div(r8911, r8891, r8893, MPFR_RNDN);
        mpfr_sub(r8912, r8894, r8891, MPFR_RNDN);
        mpfr_add(r8913, r8911, r8912, MPFR_RNDN);
        mpfr_sub(r8914, r8894, r8893, MPFR_RNDN);
        mpfr_mul(r8915, r8914, r8891, MPFR_RNDN);
        mpfr_neg(r8916, r8915, MPFR_RNDN);
        mpfr_exp(r8917, r8916, MPFR_RNDN);
        mpfr_sub(r8918, r8894, r8897, MPFR_RNDN);
        mpfr_div(r8919, r8918, r8902, MPFR_RNDN);
        mpfr_sqrt(r8920, r8919, MPFR_RNDN);
        mpfr_mul(r8921, r8920, r8920, MPFR_RNDN);
        mpfr_fma(r8922, r8898, r8917, r8921, MPFR_RNDN);
        mpfr_div(r8923, r8922, r8907, MPFR_RNDN);
        if (mpfr_get_si(r8910, MPFR_RNDN)) { mpfr_set(r8924, r8913, MPFR_RNDN); } else { mpfr_set(r8924, r8923, MPFR_RNDN); };
        return mpfr_get_d(r8924, MPFR_RNDN);
}

