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

char *name = "NMSE problem 3.2.1, negative";

double f_if(float a, float b_2F2, float c) {
        float r15869 = b_2F2;
        float r15870 = -r15869;
        float r15871 = r15869 * r15869;
        float r15872 = a;
        float r15873 = c;
        float r15874 = r15872 * r15873;
        float r15875 = r15871 - r15874;
        float r15876 = sqrt(r15875);
        float r15877 = r15870 - r15876;
        float r15878 = r15877 / r15872;
        return r15878;
}

double f_id(double a, double b_2F2, double c) {
        double r15879 = b_2F2;
        double r15880 = -r15879;
        double r15881 = r15879 * r15879;
        double r15882 = a;
        double r15883 = c;
        double r15884 = r15882 * r15883;
        double r15885 = r15881 - r15884;
        double r15886 = sqrt(r15885);
        double r15887 = r15880 - r15886;
        double r15888 = r15887 / r15882;
        return r15888;
}


double f_of(float a, float b_2F2, float c) {
        float r15889 = b_2F2;
        float r15890 = -2.874810909131491e-160f;
        bool r15891 = r15889 <= r15890;
        float r15892 = c;
        float r15893 = a;
        float r15894 = 0.5f;
        float r15895 = r15893 * r15894;
        float r15896 = r15892 / r15889;
        float r15897 = r15895 * r15896;
        float r15898 = -r15889;
        float r15899 = r15889 - r15898;
        float r15900 = r15897 - r15899;
        float r15901 = r15892 / r15900;
        float r15902 = 8.164018341878614e+86f;
        bool r15903 = r15889 <= r15902;
        float r15904 = 1.0f;
        float r15905 = r15889 * r15889;
        float r15906 = r15893 * r15892;
        float r15907 = r15905 - r15906;
        float r15908 = sqrt(r15907);
        float r15909 = r15898 - r15908;
        float r15910 = r15893 / r15909;
        float r15911 = r15904 / r15910;
        float r15912 = -2.0f;
        float r15913 = r15889 / r15893;
        float r15914 = r15912 * r15913;
        float r15915 = r15903 ? r15911 : r15914;
        float r15916 = r15891 ? r15901 : r15915;
        return r15916;
}

double f_od(double a, double b_2F2, double c) {
        double r15917 = b_2F2;
        double r15918 = -2.874810909131491e-160;
        bool r15919 = r15917 <= r15918;
        double r15920 = c;
        double r15921 = a;
        double r15922 = 0.5;
        double r15923 = r15921 * r15922;
        double r15924 = r15920 / r15917;
        double r15925 = r15923 * r15924;
        double r15926 = -r15917;
        double r15927 = r15917 - r15926;
        double r15928 = r15925 - r15927;
        double r15929 = r15920 / r15928;
        double r15930 = 8.164018341878614e+86;
        bool r15931 = r15917 <= r15930;
        double r15932 = 1.0;
        double r15933 = r15917 * r15917;
        double r15934 = r15921 * r15920;
        double r15935 = r15933 - r15934;
        double r15936 = sqrt(r15935);
        double r15937 = r15926 - r15936;
        double r15938 = r15921 / r15937;
        double r15939 = r15932 / r15938;
        double r15940 = -2.0;
        double r15941 = r15917 / r15921;
        double r15942 = r15940 * r15941;
        double r15943 = r15931 ? r15939 : r15942;
        double r15944 = r15919 ? r15929 : r15943;
        return r15944;
}

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 r15945, r15946, r15947, r15948, r15949, r15950, r15951, r15952, r15953, r15954;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r15945);
        mpfr_init(r15946);
        mpfr_init(r15947);
        mpfr_init(r15948);
        mpfr_init(r15949);
        mpfr_init(r15950);
        mpfr_init(r15951);
        mpfr_init(r15952);
        mpfr_init(r15953);
        mpfr_init(r15954);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r15945, b_2F2, MPFR_RNDN);
        mpfr_neg(r15946, r15945, MPFR_RNDN);
        mpfr_sqr(r15947, r15945, MPFR_RNDN);
        mpfr_set_d(r15948, a, MPFR_RNDN);
        mpfr_set_d(r15949, c, MPFR_RNDN);
        mpfr_mul(r15950, r15948, r15949, MPFR_RNDN);
        mpfr_sub(r15951, r15947, r15950, MPFR_RNDN);
        mpfr_sqrt(r15952, r15951, MPFR_RNDN);
        mpfr_sub(r15953, r15946, r15952, MPFR_RNDN);
        mpfr_div(r15954, r15953, r15948, MPFR_RNDN);
        return mpfr_get_d(r15954, MPFR_RNDN);
}

static mpfr_t r15955, r15956, r15957, r15958, r15959, r15960, r15961, r15962, r15963, r15964, r15965, r15966, r15967, r15968, r15969, r15970, r15971, r15972, r15973, r15974, r15975, r15976, r15977, r15978, r15979, r15980, r15981, r15982;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15955);
        mpfr_init_set_str(r15956, "-2.874810909131491e-160", 10, MPFR_RNDN);
        mpfr_init(r15957);
        mpfr_init(r15958);
        mpfr_init(r15959);
        mpfr_init_set_str(r15960, "1/2", 10, MPFR_RNDN);
        mpfr_init(r15961);
        mpfr_init(r15962);
        mpfr_init(r15963);
        mpfr_init(r15964);
        mpfr_init(r15965);
        mpfr_init(r15966);
        mpfr_init(r15967);
        mpfr_init_set_str(r15968, "8.164018341878614e+86", 10, MPFR_RNDN);
        mpfr_init(r15969);
        mpfr_init_set_str(r15970, "1", 10, MPFR_RNDN);
        mpfr_init(r15971);
        mpfr_init(r15972);
        mpfr_init(r15973);
        mpfr_init(r15974);
        mpfr_init(r15975);
        mpfr_init(r15976);
        mpfr_init(r15977);
        mpfr_init_set_str(r15978, "-2", 10, MPFR_RNDN);
        mpfr_init(r15979);
        mpfr_init(r15980);
        mpfr_init(r15981);
        mpfr_init(r15982);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r15955, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r15957, mpfr_cmp(r15955, r15956) <= 0, MPFR_RNDN);
        mpfr_set_d(r15958, c, MPFR_RNDN);
        mpfr_set_d(r15959, a, MPFR_RNDN);
        ;
        mpfr_mul(r15961, r15959, r15960, MPFR_RNDN);
        mpfr_div(r15962, r15958, r15955, MPFR_RNDN);
        mpfr_mul(r15963, r15961, r15962, MPFR_RNDN);
        mpfr_neg(r15964, r15955, MPFR_RNDN);
        mpfr_sub(r15965, r15955, r15964, MPFR_RNDN);
        mpfr_sub(r15966, r15963, r15965, MPFR_RNDN);
        mpfr_div(r15967, r15958, r15966, MPFR_RNDN);
        ;
        mpfr_set_si(r15969, mpfr_cmp(r15955, r15968) <= 0, MPFR_RNDN);
        ;
        mpfr_sqr(r15971, r15955, MPFR_RNDN);
        mpfr_mul(r15972, r15959, r15958, MPFR_RNDN);
        mpfr_sub(r15973, r15971, r15972, MPFR_RNDN);
        mpfr_sqrt(r15974, r15973, MPFR_RNDN);
        mpfr_sub(r15975, r15964, r15974, MPFR_RNDN);
        mpfr_div(r15976, r15959, r15975, MPFR_RNDN);
        mpfr_div(r15977, r15970, r15976, MPFR_RNDN);
        ;
        mpfr_div(r15979, r15955, r15959, MPFR_RNDN);
        mpfr_mul(r15980, r15978, r15979, MPFR_RNDN);
        if (mpfr_get_si(r15969, MPFR_RNDN)) { mpfr_set(r15981, r15977, MPFR_RNDN); } else { mpfr_set(r15981, r15980, MPFR_RNDN); };
        if (mpfr_get_si(r15957, MPFR_RNDN)) { mpfr_set(r15982, r15967, MPFR_RNDN); } else { mpfr_set(r15982, r15981, MPFR_RNDN); };
        return mpfr_get_d(r15982, MPFR_RNDN);
}

static mpfr_t r15983, r15984, r15985, r15986, r15987, r15988, r15989, r15990, r15991, r15992, r15993, r15994, r15995, r15996, r15997, r15998, r15999, r16000, r16001, r16002, r16003, r16004, r16005, r16006, r16007, r16008, r16009, r16010;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r15983);
        mpfr_init_set_str(r15984, "-2.874810909131491e-160", 10, MPFR_RNDN);
        mpfr_init(r15985);
        mpfr_init(r15986);
        mpfr_init(r15987);
        mpfr_init_set_str(r15988, "1/2", 10, MPFR_RNDN);
        mpfr_init(r15989);
        mpfr_init(r15990);
        mpfr_init(r15991);
        mpfr_init(r15992);
        mpfr_init(r15993);
        mpfr_init(r15994);
        mpfr_init(r15995);
        mpfr_init_set_str(r15996, "8.164018341878614e+86", 10, MPFR_RNDN);
        mpfr_init(r15997);
        mpfr_init_set_str(r15998, "1", 10, MPFR_RNDN);
        mpfr_init(r15999);
        mpfr_init(r16000);
        mpfr_init(r16001);
        mpfr_init(r16002);
        mpfr_init(r16003);
        mpfr_init(r16004);
        mpfr_init(r16005);
        mpfr_init_set_str(r16006, "-2", 10, MPFR_RNDN);
        mpfr_init(r16007);
        mpfr_init(r16008);
        mpfr_init(r16009);
        mpfr_init(r16010);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r15983, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r15985, mpfr_cmp(r15983, r15984) <= 0, MPFR_RNDN);
        mpfr_set_d(r15986, c, MPFR_RNDN);
        mpfr_set_d(r15987, a, MPFR_RNDN);
        ;
        mpfr_mul(r15989, r15987, r15988, MPFR_RNDN);
        mpfr_div(r15990, r15986, r15983, MPFR_RNDN);
        mpfr_mul(r15991, r15989, r15990, MPFR_RNDN);
        mpfr_neg(r15992, r15983, MPFR_RNDN);
        mpfr_sub(r15993, r15983, r15992, MPFR_RNDN);
        mpfr_sub(r15994, r15991, r15993, MPFR_RNDN);
        mpfr_div(r15995, r15986, r15994, MPFR_RNDN);
        ;
        mpfr_set_si(r15997, mpfr_cmp(r15983, r15996) <= 0, MPFR_RNDN);
        ;
        mpfr_sqr(r15999, r15983, MPFR_RNDN);
        mpfr_mul(r16000, r15987, r15986, MPFR_RNDN);
        mpfr_sub(r16001, r15999, r16000, MPFR_RNDN);
        mpfr_sqrt(r16002, r16001, MPFR_RNDN);
        mpfr_sub(r16003, r15992, r16002, MPFR_RNDN);
        mpfr_div(r16004, r15987, r16003, MPFR_RNDN);
        mpfr_div(r16005, r15998, r16004, MPFR_RNDN);
        ;
        mpfr_div(r16007, r15983, r15987, MPFR_RNDN);
        mpfr_mul(r16008, r16006, r16007, MPFR_RNDN);
        if (mpfr_get_si(r15997, MPFR_RNDN)) { mpfr_set(r16009, r16005, MPFR_RNDN); } else { mpfr_set(r16009, r16008, MPFR_RNDN); };
        if (mpfr_get_si(r15985, MPFR_RNDN)) { mpfr_set(r16010, r15995, MPFR_RNDN); } else { mpfr_set(r16010, r16009, MPFR_RNDN); };
        return mpfr_get_d(r16010, MPFR_RNDN);
}

