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

char *name = "quad2m (problem 3.2.1, negative)";

double f_if(float a, float b_2F2, float c) {
        float r19879 = b_2F2;
        float r19880 = -r19879;
        float r19881 = r19879 * r19879;
        float r19882 = a;
        float r19883 = c;
        float r19884 = r19882 * r19883;
        float r19885 = r19881 - r19884;
        float r19886 = sqrt(r19885);
        float r19887 = r19880 - r19886;
        float r19888 = r19887 / r19882;
        return r19888;
}

double f_id(double a, double b_2F2, double c) {
        double r19889 = b_2F2;
        double r19890 = -r19889;
        double r19891 = r19889 * r19889;
        double r19892 = a;
        double r19893 = c;
        double r19894 = r19892 * r19893;
        double r19895 = r19891 - r19894;
        double r19896 = sqrt(r19895);
        double r19897 = r19890 - r19896;
        double r19898 = r19897 / r19892;
        return r19898;
}


double f_of(float a, float b_2F2, float c) {
        float r19899 = b_2F2;
        float r19900 = -1.813301145786028e+155;
        bool r19901 = r19899 <= r19900;
        float r19902 = c;
        float r19903 = r19902 / r19899;
        float r19904 = -1/2;
        float r19905 = r19903 * r19904;
        float r19906 = 8.534380665980131e-265;
        bool r19907 = r19899 <= r19906;
        float r19908 = -r19899;
        float r19909 = r19899 * r19899;
        float r19910 = a;
        float r19911 = r19910 * r19902;
        float r19912 = r19909 - r19911;
        float r19913 = sqrt(r19912);
        float r19914 = r19908 + r19913;
        float r19915 = r19902 / r19914;
        float r19916 = 1.7256352831247111e+65;
        bool r19917 = r19899 <= r19916;
        float r19918 = r19908 - r19913;
        float r19919 = r19918 / r19910;
        float r19920 = -2;
        float r19921 = r19899 / r19910;
        float r19922 = r19920 * r19921;
        float r19923 = r19917 ? r19919 : r19922;
        float r19924 = r19907 ? r19915 : r19923;
        float r19925 = r19901 ? r19905 : r19924;
        return r19925;
}

double f_od(double a, double b_2F2, double c) {
        double r19926 = b_2F2;
        double r19927 = -1.813301145786028e+155;
        bool r19928 = r19926 <= r19927;
        double r19929 = c;
        double r19930 = r19929 / r19926;
        double r19931 = -1/2;
        double r19932 = r19930 * r19931;
        double r19933 = 8.534380665980131e-265;
        bool r19934 = r19926 <= r19933;
        double r19935 = -r19926;
        double r19936 = r19926 * r19926;
        double r19937 = a;
        double r19938 = r19937 * r19929;
        double r19939 = r19936 - r19938;
        double r19940 = sqrt(r19939);
        double r19941 = r19935 + r19940;
        double r19942 = r19929 / r19941;
        double r19943 = 1.7256352831247111e+65;
        bool r19944 = r19926 <= r19943;
        double r19945 = r19935 - r19940;
        double r19946 = r19945 / r19937;
        double r19947 = -2;
        double r19948 = r19926 / r19937;
        double r19949 = r19947 * r19948;
        double r19950 = r19944 ? r19946 : r19949;
        double r19951 = r19934 ? r19942 : r19950;
        double r19952 = r19928 ? r19932 : r19951;
        return r19952;
}

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 r19953, r19954, r19955, r19956, r19957, r19958, r19959, r19960, r19961, r19962;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2960);
        mpfr_init(r19953);
        mpfr_init(r19954);
        mpfr_init(r19955);
        mpfr_init(r19956);
        mpfr_init(r19957);
        mpfr_init(r19958);
        mpfr_init(r19959);
        mpfr_init(r19960);
        mpfr_init(r19961);
        mpfr_init(r19962);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r19953, b_2F2, MPFR_RNDN);
        mpfr_neg(r19954, r19953, MPFR_RNDN);
        mpfr_mul(r19955, r19953, r19953, MPFR_RNDN);
        mpfr_set_d(r19956, a, MPFR_RNDN);
        mpfr_set_d(r19957, c, MPFR_RNDN);
        mpfr_mul(r19958, r19956, r19957, MPFR_RNDN);
        mpfr_sub(r19959, r19955, r19958, MPFR_RNDN);
        mpfr_sqrt(r19960, r19959, MPFR_RNDN);
        mpfr_sub(r19961, r19954, r19960, MPFR_RNDN);
        mpfr_div(r19962, r19961, r19956, MPFR_RNDN);
        return mpfr_get_d(r19962, MPFR_RNDN);
}

static mpfr_t r19963, r19964, r19965, r19966, r19967, r19968, r19969, r19970, r19971, r19972, r19973, r19974, r19975, r19976, r19977, r19978, r19979, r19980, r19981, r19982, r19983, r19984, r19985, r19986, r19987, r19988, r19989;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2960);
        mpfr_init(r19963);
        mpfr_init_set_str(r19964, "-1.813301145786028e+155", 10, MPFR_RNDN);
        mpfr_init(r19965);
        mpfr_init(r19966);
        mpfr_init(r19967);
        mpfr_init_set_str(r19968, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r19969);
        mpfr_init_set_str(r19970, "8.534380665980131e-265", 10, MPFR_RNDN);
        mpfr_init(r19971);
        mpfr_init(r19972);
        mpfr_init(r19973);
        mpfr_init(r19974);
        mpfr_init(r19975);
        mpfr_init(r19976);
        mpfr_init(r19977);
        mpfr_init(r19978);
        mpfr_init(r19979);
        mpfr_init_set_str(r19980, "1.7256352831247111e+65", 10, MPFR_RNDN);
        mpfr_init(r19981);
        mpfr_init(r19982);
        mpfr_init(r19983);
        mpfr_init_set_str(r19984, "-2", 10, MPFR_RNDN);
        mpfr_init(r19985);
        mpfr_init(r19986);
        mpfr_init(r19987);
        mpfr_init(r19988);
        mpfr_init(r19989);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r19963, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r19965, mpfr_cmp(r19963, r19964) <= 0, MPFR_RNDN);
        mpfr_set_d(r19966, c, MPFR_RNDN);
        mpfr_div(r19967, r19966, r19963, MPFR_RNDN);
        ;
        mpfr_mul(r19969, r19967, r19968, MPFR_RNDN);
        ;
        mpfr_set_si(r19971, mpfr_cmp(r19963, r19970) <= 0, MPFR_RNDN);
        mpfr_neg(r19972, r19963, MPFR_RNDN);
        mpfr_mul(r19973, r19963, r19963, MPFR_RNDN);
        mpfr_set_d(r19974, a, MPFR_RNDN);
        mpfr_mul(r19975, r19974, r19966, MPFR_RNDN);
        mpfr_sub(r19976, r19973, r19975, MPFR_RNDN);
        mpfr_sqrt(r19977, r19976, MPFR_RNDN);
        mpfr_add(r19978, r19972, r19977, MPFR_RNDN);
        mpfr_div(r19979, r19966, r19978, MPFR_RNDN);
        ;
        mpfr_set_si(r19981, mpfr_cmp(r19963, r19980) <= 0, MPFR_RNDN);
        mpfr_sub(r19982, r19972, r19977, MPFR_RNDN);
        mpfr_div(r19983, r19982, r19974, MPFR_RNDN);
        ;
        mpfr_div(r19985, r19963, r19974, MPFR_RNDN);
        mpfr_mul(r19986, r19984, r19985, MPFR_RNDN);
        if (mpfr_get_si(r19981, MPFR_RNDN)) { mpfr_set(r19987, r19983, MPFR_RNDN); } else { mpfr_set(r19987, r19986, MPFR_RNDN); };
        if (mpfr_get_si(r19971, MPFR_RNDN)) { mpfr_set(r19988, r19979, MPFR_RNDN); } else { mpfr_set(r19988, r19987, MPFR_RNDN); };
        if (mpfr_get_si(r19965, MPFR_RNDN)) { mpfr_set(r19989, r19969, MPFR_RNDN); } else { mpfr_set(r19989, r19988, MPFR_RNDN); };
        return mpfr_get_d(r19989, MPFR_RNDN);
}

static mpfr_t r19990, r19991, r19992, r19993, r19994, r19995, r19996, r19997, r19998, r19999, r20000, r20001, r20002, r20003, r20004, r20005, r20006, r20007, r20008, r20009, r20010, r20011, r20012, r20013, r20014, r20015, r20016;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2960);
        mpfr_init(r19990);
        mpfr_init_set_str(r19991, "-1.813301145786028e+155", 10, MPFR_RNDN);
        mpfr_init(r19992);
        mpfr_init(r19993);
        mpfr_init(r19994);
        mpfr_init_set_str(r19995, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r19996);
        mpfr_init_set_str(r19997, "8.534380665980131e-265", 10, MPFR_RNDN);
        mpfr_init(r19998);
        mpfr_init(r19999);
        mpfr_init(r20000);
        mpfr_init(r20001);
        mpfr_init(r20002);
        mpfr_init(r20003);
        mpfr_init(r20004);
        mpfr_init(r20005);
        mpfr_init(r20006);
        mpfr_init_set_str(r20007, "1.7256352831247111e+65", 10, MPFR_RNDN);
        mpfr_init(r20008);
        mpfr_init(r20009);
        mpfr_init(r20010);
        mpfr_init_set_str(r20011, "-2", 10, MPFR_RNDN);
        mpfr_init(r20012);
        mpfr_init(r20013);
        mpfr_init(r20014);
        mpfr_init(r20015);
        mpfr_init(r20016);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r19990, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r19992, mpfr_cmp(r19990, r19991) <= 0, MPFR_RNDN);
        mpfr_set_d(r19993, c, MPFR_RNDN);
        mpfr_div(r19994, r19993, r19990, MPFR_RNDN);
        ;
        mpfr_mul(r19996, r19994, r19995, MPFR_RNDN);
        ;
        mpfr_set_si(r19998, mpfr_cmp(r19990, r19997) <= 0, MPFR_RNDN);
        mpfr_neg(r19999, r19990, MPFR_RNDN);
        mpfr_mul(r20000, r19990, r19990, MPFR_RNDN);
        mpfr_set_d(r20001, a, MPFR_RNDN);
        mpfr_mul(r20002, r20001, r19993, MPFR_RNDN);
        mpfr_sub(r20003, r20000, r20002, MPFR_RNDN);
        mpfr_sqrt(r20004, r20003, MPFR_RNDN);
        mpfr_add(r20005, r19999, r20004, MPFR_RNDN);
        mpfr_div(r20006, r19993, r20005, MPFR_RNDN);
        ;
        mpfr_set_si(r20008, mpfr_cmp(r19990, r20007) <= 0, MPFR_RNDN);
        mpfr_sub(r20009, r19999, r20004, MPFR_RNDN);
        mpfr_div(r20010, r20009, r20001, MPFR_RNDN);
        ;
        mpfr_div(r20012, r19990, r20001, MPFR_RNDN);
        mpfr_mul(r20013, r20011, r20012, MPFR_RNDN);
        if (mpfr_get_si(r20008, MPFR_RNDN)) { mpfr_set(r20014, r20010, MPFR_RNDN); } else { mpfr_set(r20014, r20013, MPFR_RNDN); };
        if (mpfr_get_si(r19998, MPFR_RNDN)) { mpfr_set(r20015, r20006, MPFR_RNDN); } else { mpfr_set(r20015, r20014, MPFR_RNDN); };
        if (mpfr_get_si(r19992, MPFR_RNDN)) { mpfr_set(r20016, r19996, MPFR_RNDN); } else { mpfr_set(r20016, r20015, MPFR_RNDN); };
        return mpfr_get_d(r20016, MPFR_RNDN);
}

