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

char *name = "NMSE problem 3.2.1";

double f_if(float a, float b_2F2, float c) {
        float r27884 = b_2F2;
        float r27885 = -r27884;
        float r27886 = r27884 * r27884;
        float r27887 = a;
        float r27888 = c;
        float r27889 = r27887 * r27888;
        float r27890 = r27886 - r27889;
        float r27891 = sqrt(r27890);
        float r27892 = r27885 - r27891;
        float r27893 = r27892 / r27887;
        return r27893;
}

double f_id(double a, double b_2F2, double c) {
        double r27894 = b_2F2;
        double r27895 = -r27894;
        double r27896 = r27894 * r27894;
        double r27897 = a;
        double r27898 = c;
        double r27899 = r27897 * r27898;
        double r27900 = r27896 - r27899;
        double r27901 = sqrt(r27900);
        double r27902 = r27895 - r27901;
        double r27903 = r27902 / r27897;
        return r27903;
}


double f_of(float a, float b_2F2, float c) {
        float r27904 = b_2F2;
        float r27905 = -5.018034098196628e+28;
        bool r27906 = r27904 <= r27905;
        float r27907 = c;
        float r27908 = r27907 / r27904;
        float r27909 = -1/2;
        float r27910 = r27908 * r27909;
        float r27911 = -1.992853954034314e-66;
        bool r27912 = r27904 <= r27911;
        float r27913 = a;
        float r27914 = r27907 * r27913;
        float r27915 = -r27904;
        float r27916 = r27904 * r27904;
        float r27917 = r27913 * r27907;
        float r27918 = r27916 - r27917;
        float r27919 = sqrt(r27918);
        float r27920 = r27915 + r27919;
        float r27921 = r27914 / r27920;
        float r27922 = r27921 / r27913;
        float r27923 = -5.3589749776329416e-108;
        bool r27924 = r27904 <= r27923;
        float r27925 = 1.7007616628281973e+81;
        bool r27926 = r27904 <= r27925;
        float r27927 = r27915 - r27919;
        float r27928 = r27927 / r27913;
        float r27929 = -2;
        float r27930 = r27904 / r27913;
        float r27931 = r27929 * r27930;
        float r27932 = r27926 ? r27928 : r27931;
        float r27933 = r27924 ? r27910 : r27932;
        float r27934 = r27912 ? r27922 : r27933;
        float r27935 = r27906 ? r27910 : r27934;
        return r27935;
}

double f_od(double a, double b_2F2, double c) {
        double r27936 = b_2F2;
        double r27937 = -5.018034098196628e+28;
        bool r27938 = r27936 <= r27937;
        double r27939 = c;
        double r27940 = r27939 / r27936;
        double r27941 = -1/2;
        double r27942 = r27940 * r27941;
        double r27943 = -1.992853954034314e-66;
        bool r27944 = r27936 <= r27943;
        double r27945 = a;
        double r27946 = r27939 * r27945;
        double r27947 = -r27936;
        double r27948 = r27936 * r27936;
        double r27949 = r27945 * r27939;
        double r27950 = r27948 - r27949;
        double r27951 = sqrt(r27950);
        double r27952 = r27947 + r27951;
        double r27953 = r27946 / r27952;
        double r27954 = r27953 / r27945;
        double r27955 = -5.3589749776329416e-108;
        bool r27956 = r27936 <= r27955;
        double r27957 = 1.7007616628281973e+81;
        bool r27958 = r27936 <= r27957;
        double r27959 = r27947 - r27951;
        double r27960 = r27959 / r27945;
        double r27961 = -2;
        double r27962 = r27936 / r27945;
        double r27963 = r27961 * r27962;
        double r27964 = r27958 ? r27960 : r27963;
        double r27965 = r27956 ? r27942 : r27964;
        double r27966 = r27944 ? r27954 : r27965;
        double r27967 = r27938 ? r27942 : r27966;
        return r27967;
}

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 r27968, r27969, r27970, r27971, r27972, r27973, r27974, r27975, r27976, r27977;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2704);
        mpfr_init(r27968);
        mpfr_init(r27969);
        mpfr_init(r27970);
        mpfr_init(r27971);
        mpfr_init(r27972);
        mpfr_init(r27973);
        mpfr_init(r27974);
        mpfr_init(r27975);
        mpfr_init(r27976);
        mpfr_init(r27977);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r27968, b_2F2, MPFR_RNDN);
        mpfr_neg(r27969, r27968, MPFR_RNDN);
        mpfr_mul(r27970, r27968, r27968, MPFR_RNDN);
        mpfr_set_d(r27971, a, MPFR_RNDN);
        mpfr_set_d(r27972, c, MPFR_RNDN);
        mpfr_mul(r27973, r27971, r27972, MPFR_RNDN);
        mpfr_sub(r27974, r27970, r27973, MPFR_RNDN);
        mpfr_sqrt(r27975, r27974, MPFR_RNDN);
        mpfr_sub(r27976, r27969, r27975, MPFR_RNDN);
        mpfr_div(r27977, r27976, r27971, MPFR_RNDN);
        return mpfr_get_d(r27977, MPFR_RNDN);
}

static mpfr_t r27978, r27979, r27980, r27981, r27982, r27983, r27984, r27985, r27986, r27987, r27988, r27989, r27990, r27991, r27992, r27993, r27994, r27995, r27996, r27997, r27998, r27999, r28000, r28001, r28002, r28003, r28004, r28005, r28006, r28007, r28008, r28009;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2704);
        mpfr_init(r27978);
        mpfr_init_set_str(r27979, "-5.018034098196628e+28", 10, MPFR_RNDN);
        mpfr_init(r27980);
        mpfr_init(r27981);
        mpfr_init(r27982);
        mpfr_init_set_str(r27983, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27984);
        mpfr_init_set_str(r27985, "-1.992853954034314e-66", 10, MPFR_RNDN);
        mpfr_init(r27986);
        mpfr_init(r27987);
        mpfr_init(r27988);
        mpfr_init(r27989);
        mpfr_init(r27990);
        mpfr_init(r27991);
        mpfr_init(r27992);
        mpfr_init(r27993);
        mpfr_init(r27994);
        mpfr_init(r27995);
        mpfr_init(r27996);
        mpfr_init_set_str(r27997, "-5.3589749776329416e-108", 10, MPFR_RNDN);
        mpfr_init(r27998);
        mpfr_init_set_str(r27999, "1.7007616628281973e+81", 10, MPFR_RNDN);
        mpfr_init(r28000);
        mpfr_init(r28001);
        mpfr_init(r28002);
        mpfr_init_set_str(r28003, "-2", 10, MPFR_RNDN);
        mpfr_init(r28004);
        mpfr_init(r28005);
        mpfr_init(r28006);
        mpfr_init(r28007);
        mpfr_init(r28008);
        mpfr_init(r28009);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r27978, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r27980, mpfr_cmp(r27978, r27979) <= 0, MPFR_RNDN);
        mpfr_set_d(r27981, c, MPFR_RNDN);
        mpfr_div(r27982, r27981, r27978, MPFR_RNDN);
        ;
        mpfr_mul(r27984, r27982, r27983, MPFR_RNDN);
        ;
        mpfr_set_si(r27986, mpfr_cmp(r27978, r27985) <= 0, MPFR_RNDN);
        mpfr_set_d(r27987, a, MPFR_RNDN);
        mpfr_mul(r27988, r27981, r27987, MPFR_RNDN);
        mpfr_neg(r27989, r27978, MPFR_RNDN);
        mpfr_mul(r27990, r27978, r27978, MPFR_RNDN);
        mpfr_mul(r27991, r27987, r27981, MPFR_RNDN);
        mpfr_sub(r27992, r27990, r27991, MPFR_RNDN);
        mpfr_sqrt(r27993, r27992, MPFR_RNDN);
        mpfr_add(r27994, r27989, r27993, MPFR_RNDN);
        mpfr_div(r27995, r27988, r27994, MPFR_RNDN);
        mpfr_div(r27996, r27995, r27987, MPFR_RNDN);
        ;
        mpfr_set_si(r27998, mpfr_cmp(r27978, r27997) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r28000, mpfr_cmp(r27978, r27999) <= 0, MPFR_RNDN);
        mpfr_sub(r28001, r27989, r27993, MPFR_RNDN);
        mpfr_div(r28002, r28001, r27987, MPFR_RNDN);
        ;
        mpfr_div(r28004, r27978, r27987, MPFR_RNDN);
        mpfr_mul(r28005, r28003, r28004, MPFR_RNDN);
        if (mpfr_get_si(r28000, MPFR_RNDN)) { mpfr_set(r28006, r28002, MPFR_RNDN); } else { mpfr_set(r28006, r28005, MPFR_RNDN); };
        if (mpfr_get_si(r27998, MPFR_RNDN)) { mpfr_set(r28007, r27984, MPFR_RNDN); } else { mpfr_set(r28007, r28006, MPFR_RNDN); };
        if (mpfr_get_si(r27986, MPFR_RNDN)) { mpfr_set(r28008, r27996, MPFR_RNDN); } else { mpfr_set(r28008, r28007, MPFR_RNDN); };
        if (mpfr_get_si(r27980, MPFR_RNDN)) { mpfr_set(r28009, r27984, MPFR_RNDN); } else { mpfr_set(r28009, r28008, MPFR_RNDN); };
        return mpfr_get_d(r28009, MPFR_RNDN);
}

static mpfr_t r28010, r28011, r28012, r28013, r28014, r28015, r28016, r28017, r28018, r28019, r28020, r28021, r28022, r28023, r28024, r28025, r28026, r28027, r28028, r28029, r28030, r28031, r28032, r28033, r28034, r28035, r28036, r28037, r28038, r28039, r28040, r28041;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2704);
        mpfr_init(r28010);
        mpfr_init_set_str(r28011, "-5.018034098196628e+28", 10, MPFR_RNDN);
        mpfr_init(r28012);
        mpfr_init(r28013);
        mpfr_init(r28014);
        mpfr_init_set_str(r28015, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r28016);
        mpfr_init_set_str(r28017, "-1.992853954034314e-66", 10, MPFR_RNDN);
        mpfr_init(r28018);
        mpfr_init(r28019);
        mpfr_init(r28020);
        mpfr_init(r28021);
        mpfr_init(r28022);
        mpfr_init(r28023);
        mpfr_init(r28024);
        mpfr_init(r28025);
        mpfr_init(r28026);
        mpfr_init(r28027);
        mpfr_init(r28028);
        mpfr_init_set_str(r28029, "-5.3589749776329416e-108", 10, MPFR_RNDN);
        mpfr_init(r28030);
        mpfr_init_set_str(r28031, "1.7007616628281973e+81", 10, MPFR_RNDN);
        mpfr_init(r28032);
        mpfr_init(r28033);
        mpfr_init(r28034);
        mpfr_init_set_str(r28035, "-2", 10, MPFR_RNDN);
        mpfr_init(r28036);
        mpfr_init(r28037);
        mpfr_init(r28038);
        mpfr_init(r28039);
        mpfr_init(r28040);
        mpfr_init(r28041);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r28010, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r28012, mpfr_cmp(r28010, r28011) <= 0, MPFR_RNDN);
        mpfr_set_d(r28013, c, MPFR_RNDN);
        mpfr_div(r28014, r28013, r28010, MPFR_RNDN);
        ;
        mpfr_mul(r28016, r28014, r28015, MPFR_RNDN);
        ;
        mpfr_set_si(r28018, mpfr_cmp(r28010, r28017) <= 0, MPFR_RNDN);
        mpfr_set_d(r28019, a, MPFR_RNDN);
        mpfr_mul(r28020, r28013, r28019, MPFR_RNDN);
        mpfr_neg(r28021, r28010, MPFR_RNDN);
        mpfr_mul(r28022, r28010, r28010, MPFR_RNDN);
        mpfr_mul(r28023, r28019, r28013, MPFR_RNDN);
        mpfr_sub(r28024, r28022, r28023, MPFR_RNDN);
        mpfr_sqrt(r28025, r28024, MPFR_RNDN);
        mpfr_add(r28026, r28021, r28025, MPFR_RNDN);
        mpfr_div(r28027, r28020, r28026, MPFR_RNDN);
        mpfr_div(r28028, r28027, r28019, MPFR_RNDN);
        ;
        mpfr_set_si(r28030, mpfr_cmp(r28010, r28029) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r28032, mpfr_cmp(r28010, r28031) <= 0, MPFR_RNDN);
        mpfr_sub(r28033, r28021, r28025, MPFR_RNDN);
        mpfr_div(r28034, r28033, r28019, MPFR_RNDN);
        ;
        mpfr_div(r28036, r28010, r28019, MPFR_RNDN);
        mpfr_mul(r28037, r28035, r28036, MPFR_RNDN);
        if (mpfr_get_si(r28032, MPFR_RNDN)) { mpfr_set(r28038, r28034, MPFR_RNDN); } else { mpfr_set(r28038, r28037, MPFR_RNDN); };
        if (mpfr_get_si(r28030, MPFR_RNDN)) { mpfr_set(r28039, r28016, MPFR_RNDN); } else { mpfr_set(r28039, r28038, MPFR_RNDN); };
        if (mpfr_get_si(r28018, MPFR_RNDN)) { mpfr_set(r28040, r28028, MPFR_RNDN); } else { mpfr_set(r28040, r28039, MPFR_RNDN); };
        if (mpfr_get_si(r28012, MPFR_RNDN)) { mpfr_set(r28041, r28016, MPFR_RNDN); } else { mpfr_set(r28041, r28040, MPFR_RNDN); };
        return mpfr_get_d(r28041, MPFR_RNDN);
}

