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

char *name = "NMSE problem 3.4.2";

double f_if(float a, float b, float eps) {
        float r25878 = eps;
        float r25879 = a;
        float r25880 = b;
        float r25881 = r25879 + r25880;
        float r25882 = r25881 * r25878;
        float r25883 = exp(r25882);
        float r25884 = 1.0f;
        float r25885 = r25883 - r25884;
        float r25886 = r25878 * r25885;
        float r25887 = r25879 * r25878;
        float r25888 = exp(r25887);
        float r25889 = r25888 - r25884;
        float r25890 = r25880 * r25878;
        float r25891 = exp(r25890);
        float r25892 = r25891 - r25884;
        float r25893 = r25889 * r25892;
        float r25894 = r25886 / r25893;
        return r25894;
}

double f_id(double a, double b, double eps) {
        double r25895 = eps;
        double r25896 = a;
        double r25897 = b;
        double r25898 = r25896 + r25897;
        double r25899 = r25898 * r25895;
        double r25900 = exp(r25899);
        double r25901 = 1.0;
        double r25902 = r25900 - r25901;
        double r25903 = r25895 * r25902;
        double r25904 = r25896 * r25895;
        double r25905 = exp(r25904);
        double r25906 = r25905 - r25901;
        double r25907 = r25897 * r25895;
        double r25908 = exp(r25907);
        double r25909 = r25908 - r25901;
        double r25910 = r25906 * r25909;
        double r25911 = r25903 / r25910;
        return r25911;
}


double f_of(float a, float b, float eps) {
        float r25912 = a;
        float r25913 = eps;
        float r25914 = r25912 * r25913;
        float r25915 = -2.2151465087780744e+261f;
        bool r25916 = r25914 <= r25915;
        float r25917 = b;
        float r25918 = r25912 + r25917;
        float r25919 = r25918 * r25913;
        float r25920 = exp(r25919);
        float r25921 = 1.0f;
        float r25922 = r25920 - r25921;
        float r25923 = r25913 * r25922;
        float r25924 = exp(r25914);
        float r25925 = r25924 - r25921;
        float r25926 = r25917 * r25913;
        float r25927 = exp(r25926);
        float r25928 = r25927 - r25921;
        float r25929 = r25925 * r25928;
        float r25930 = r25923 / r25929;
        float r25931 = -5.3318909641188086e+141f;
        bool r25932 = r25914 <= r25931;
        float r25933 = r25921 / r25917;
        float r25934 = r25921 / r25912;
        float r25935 = r25933 + r25934;
        float r25936 = -3.8030378975762234e+73f;
        bool r25937 = r25914 <= r25936;
        float r25938 = 1059700.6866205125f;
        bool r25939 = r25914 <= r25938;
        float r25940 = r25939 ? r25935 : r25930;
        float r25941 = r25937 ? r25930 : r25940;
        float r25942 = r25932 ? r25935 : r25941;
        float r25943 = r25916 ? r25930 : r25942;
        return r25943;
}

double f_od(double a, double b, double eps) {
        double r25944 = a;
        double r25945 = eps;
        double r25946 = r25944 * r25945;
        double r25947 = -2.2151465087780744e+261;
        bool r25948 = r25946 <= r25947;
        double r25949 = b;
        double r25950 = r25944 + r25949;
        double r25951 = r25950 * r25945;
        double r25952 = exp(r25951);
        double r25953 = 1.0;
        double r25954 = r25952 - r25953;
        double r25955 = r25945 * r25954;
        double r25956 = exp(r25946);
        double r25957 = r25956 - r25953;
        double r25958 = r25949 * r25945;
        double r25959 = exp(r25958);
        double r25960 = r25959 - r25953;
        double r25961 = r25957 * r25960;
        double r25962 = r25955 / r25961;
        double r25963 = -5.3318909641188086e+141;
        bool r25964 = r25946 <= r25963;
        double r25965 = r25953 / r25949;
        double r25966 = r25953 / r25944;
        double r25967 = r25965 + r25966;
        double r25968 = -3.8030378975762234e+73;
        bool r25969 = r25946 <= r25968;
        double r25970 = 1059700.6866205125;
        bool r25971 = r25946 <= r25970;
        double r25972 = r25971 ? r25967 : r25962;
        double r25973 = r25969 ? r25962 : r25972;
        double r25974 = r25964 ? r25967 : r25973;
        double r25975 = r25948 ? r25962 : r25974;
        return r25975;
}

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 r25976, r25977, r25978, r25979, r25980, r25981, r25982, r25983, r25984, r25985, r25986, r25987, r25988, r25989, r25990, r25991, r25992;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r25976);
        mpfr_init(r25977);
        mpfr_init(r25978);
        mpfr_init(r25979);
        mpfr_init(r25980);
        mpfr_init(r25981);
        mpfr_init_set_str(r25982, "1", 10, MPFR_RNDN);
        mpfr_init(r25983);
        mpfr_init(r25984);
        mpfr_init(r25985);
        mpfr_init(r25986);
        mpfr_init(r25987);
        mpfr_init(r25988);
        mpfr_init(r25989);
        mpfr_init(r25990);
        mpfr_init(r25991);
        mpfr_init(r25992);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r25976, eps, MPFR_RNDN);
        mpfr_set_d(r25977, a, MPFR_RNDN);
        mpfr_set_d(r25978, b, MPFR_RNDN);
        mpfr_add(r25979, r25977, r25978, MPFR_RNDN);
        mpfr_mul(r25980, r25979, r25976, MPFR_RNDN);
        mpfr_exp(r25981, r25980, MPFR_RNDN);
        ;
        mpfr_sub(r25983, r25981, r25982, MPFR_RNDN);
        mpfr_mul(r25984, r25976, r25983, MPFR_RNDN);
        mpfr_mul(r25985, r25977, r25976, MPFR_RNDN);
        mpfr_exp(r25986, r25985, MPFR_RNDN);
        mpfr_sub(r25987, r25986, r25982, MPFR_RNDN);
        mpfr_mul(r25988, r25978, r25976, MPFR_RNDN);
        mpfr_exp(r25989, r25988, MPFR_RNDN);
        mpfr_sub(r25990, r25989, r25982, MPFR_RNDN);
        mpfr_mul(r25991, r25987, r25990, MPFR_RNDN);
        mpfr_div(r25992, r25984, r25991, MPFR_RNDN);
        return mpfr_get_d(r25992, MPFR_RNDN);
}

static mpfr_t r25993, r25994, r25995, r25996, r25997, r25998, r25999, r26000, r26001, r26002, r26003, r26004, r26005, r26006, r26007, r26008, r26009, r26010, r26011, r26012, r26013, r26014, r26015, r26016, r26017, r26018, r26019, r26020, r26021, r26022, r26023, r26024;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r25993);
        mpfr_init(r25994);
        mpfr_init(r25995);
        mpfr_init_set_str(r25996, "-2.2151465087780744e+261", 10, MPFR_RNDN);
        mpfr_init(r25997);
        mpfr_init(r25998);
        mpfr_init(r25999);
        mpfr_init(r26000);
        mpfr_init(r26001);
        mpfr_init_set_str(r26002, "1", 10, MPFR_RNDN);
        mpfr_init(r26003);
        mpfr_init(r26004);
        mpfr_init(r26005);
        mpfr_init(r26006);
        mpfr_init(r26007);
        mpfr_init(r26008);
        mpfr_init(r26009);
        mpfr_init(r26010);
        mpfr_init(r26011);
        mpfr_init_set_str(r26012, "-5.3318909641188086e+141", 10, MPFR_RNDN);
        mpfr_init(r26013);
        mpfr_init(r26014);
        mpfr_init(r26015);
        mpfr_init(r26016);
        mpfr_init_set_str(r26017, "-3.8030378975762234e+73", 10, MPFR_RNDN);
        mpfr_init(r26018);
        mpfr_init_set_str(r26019, "1059700.6866205125", 10, MPFR_RNDN);
        mpfr_init(r26020);
        mpfr_init(r26021);
        mpfr_init(r26022);
        mpfr_init(r26023);
        mpfr_init(r26024);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r25993, a, MPFR_RNDN);
        mpfr_set_d(r25994, eps, MPFR_RNDN);
        mpfr_mul(r25995, r25993, r25994, MPFR_RNDN);
        ;
        mpfr_set_si(r25997, mpfr_cmp(r25995, r25996) <= 0, MPFR_RNDN);
        mpfr_set_d(r25998, b, MPFR_RNDN);
        mpfr_add(r25999, r25993, r25998, MPFR_RNDN);
        mpfr_mul(r26000, r25999, r25994, MPFR_RNDN);
        mpfr_exp(r26001, r26000, MPFR_RNDN);
        ;
        mpfr_sub(r26003, r26001, r26002, MPFR_RNDN);
        mpfr_mul(r26004, r25994, r26003, MPFR_RNDN);
        mpfr_exp(r26005, r25995, MPFR_RNDN);
        mpfr_sub(r26006, r26005, r26002, MPFR_RNDN);
        mpfr_mul(r26007, r25998, r25994, MPFR_RNDN);
        mpfr_exp(r26008, r26007, MPFR_RNDN);
        mpfr_sub(r26009, r26008, r26002, MPFR_RNDN);
        mpfr_mul(r26010, r26006, r26009, MPFR_RNDN);
        mpfr_div(r26011, r26004, r26010, MPFR_RNDN);
        ;
        mpfr_set_si(r26013, mpfr_cmp(r25995, r26012) <= 0, MPFR_RNDN);
        mpfr_div(r26014, r26002, r25998, MPFR_RNDN);
        mpfr_div(r26015, r26002, r25993, MPFR_RNDN);
        mpfr_add(r26016, r26014, r26015, MPFR_RNDN);
        ;
        mpfr_set_si(r26018, mpfr_cmp(r25995, r26017) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r26020, mpfr_cmp(r25995, r26019) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r26020, MPFR_RNDN)) { mpfr_set(r26021, r26016, MPFR_RNDN); } else { mpfr_set(r26021, r26011, MPFR_RNDN); };
        if (mpfr_get_si(r26018, MPFR_RNDN)) { mpfr_set(r26022, r26011, MPFR_RNDN); } else { mpfr_set(r26022, r26021, MPFR_RNDN); };
        if (mpfr_get_si(r26013, MPFR_RNDN)) { mpfr_set(r26023, r26016, MPFR_RNDN); } else { mpfr_set(r26023, r26022, MPFR_RNDN); };
        if (mpfr_get_si(r25997, MPFR_RNDN)) { mpfr_set(r26024, r26011, MPFR_RNDN); } else { mpfr_set(r26024, r26023, MPFR_RNDN); };
        return mpfr_get_d(r26024, MPFR_RNDN);
}

static mpfr_t r26025, r26026, r26027, r26028, r26029, r26030, r26031, r26032, r26033, r26034, r26035, r26036, r26037, r26038, r26039, r26040, r26041, r26042, r26043, r26044, r26045, r26046, r26047, r26048, r26049, r26050, r26051, r26052, r26053, r26054, r26055, r26056;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r26025);
        mpfr_init(r26026);
        mpfr_init(r26027);
        mpfr_init_set_str(r26028, "-2.2151465087780744e+261", 10, MPFR_RNDN);
        mpfr_init(r26029);
        mpfr_init(r26030);
        mpfr_init(r26031);
        mpfr_init(r26032);
        mpfr_init(r26033);
        mpfr_init_set_str(r26034, "1", 10, MPFR_RNDN);
        mpfr_init(r26035);
        mpfr_init(r26036);
        mpfr_init(r26037);
        mpfr_init(r26038);
        mpfr_init(r26039);
        mpfr_init(r26040);
        mpfr_init(r26041);
        mpfr_init(r26042);
        mpfr_init(r26043);
        mpfr_init_set_str(r26044, "-5.3318909641188086e+141", 10, MPFR_RNDN);
        mpfr_init(r26045);
        mpfr_init(r26046);
        mpfr_init(r26047);
        mpfr_init(r26048);
        mpfr_init_set_str(r26049, "-3.8030378975762234e+73", 10, MPFR_RNDN);
        mpfr_init(r26050);
        mpfr_init_set_str(r26051, "1059700.6866205125", 10, MPFR_RNDN);
        mpfr_init(r26052);
        mpfr_init(r26053);
        mpfr_init(r26054);
        mpfr_init(r26055);
        mpfr_init(r26056);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r26025, a, MPFR_RNDN);
        mpfr_set_d(r26026, eps, MPFR_RNDN);
        mpfr_mul(r26027, r26025, r26026, MPFR_RNDN);
        ;
        mpfr_set_si(r26029, mpfr_cmp(r26027, r26028) <= 0, MPFR_RNDN);
        mpfr_set_d(r26030, b, MPFR_RNDN);
        mpfr_add(r26031, r26025, r26030, MPFR_RNDN);
        mpfr_mul(r26032, r26031, r26026, MPFR_RNDN);
        mpfr_exp(r26033, r26032, MPFR_RNDN);
        ;
        mpfr_sub(r26035, r26033, r26034, MPFR_RNDN);
        mpfr_mul(r26036, r26026, r26035, MPFR_RNDN);
        mpfr_exp(r26037, r26027, MPFR_RNDN);
        mpfr_sub(r26038, r26037, r26034, MPFR_RNDN);
        mpfr_mul(r26039, r26030, r26026, MPFR_RNDN);
        mpfr_exp(r26040, r26039, MPFR_RNDN);
        mpfr_sub(r26041, r26040, r26034, MPFR_RNDN);
        mpfr_mul(r26042, r26038, r26041, MPFR_RNDN);
        mpfr_div(r26043, r26036, r26042, MPFR_RNDN);
        ;
        mpfr_set_si(r26045, mpfr_cmp(r26027, r26044) <= 0, MPFR_RNDN);
        mpfr_div(r26046, r26034, r26030, MPFR_RNDN);
        mpfr_div(r26047, r26034, r26025, MPFR_RNDN);
        mpfr_add(r26048, r26046, r26047, MPFR_RNDN);
        ;
        mpfr_set_si(r26050, mpfr_cmp(r26027, r26049) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r26052, mpfr_cmp(r26027, r26051) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r26052, MPFR_RNDN)) { mpfr_set(r26053, r26048, MPFR_RNDN); } else { mpfr_set(r26053, r26043, MPFR_RNDN); };
        if (mpfr_get_si(r26050, MPFR_RNDN)) { mpfr_set(r26054, r26043, MPFR_RNDN); } else { mpfr_set(r26054, r26053, MPFR_RNDN); };
        if (mpfr_get_si(r26045, MPFR_RNDN)) { mpfr_set(r26055, r26048, MPFR_RNDN); } else { mpfr_set(r26055, r26054, MPFR_RNDN); };
        if (mpfr_get_si(r26029, MPFR_RNDN)) { mpfr_set(r26056, r26043, MPFR_RNDN); } else { mpfr_set(r26056, r26055, MPFR_RNDN); };
        return mpfr_get_d(r26056, MPFR_RNDN);
}

