#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 r19896 = b_2F2;
        float r19897 = -r19896;
        float r19898 = r19896 * r19896;
        float r19899 = a;
        float r19900 = c;
        float r19901 = r19899 * r19900;
        float r19902 = r19898 - r19901;
        float r19903 = sqrt(r19902);
        float r19904 = r19897 - r19903;
        float r19905 = r19904 / r19899;
        return r19905;
}

double f_id(double a, double b_2F2, double c) {
        double r19906 = b_2F2;
        double r19907 = -r19906;
        double r19908 = r19906 * r19906;
        double r19909 = a;
        double r19910 = c;
        double r19911 = r19909 * r19910;
        double r19912 = r19908 - r19911;
        double r19913 = sqrt(r19912);
        double r19914 = r19907 - r19913;
        double r19915 = r19914 / r19909;
        return r19915;
}


double f_of(float a, float b_2F2, float c) {
        float r19916 = b_2F2;
        float r19917 = -4.525036217684268e+158;
        bool r19918 = r19916 <= r19917;
        float r19919 = c;
        float r19920 = r19919 / r19916;
        float r19921 = -1/2;
        float r19922 = r19920 * r19921;
        float r19923 = -5.266140246506573e-287;
        bool r19924 = r19916 <= r19923;
        float r19925 = 1;
        float r19926 = r19916 * r19916;
        float r19927 = a;
        float r19928 = r19919 * r19927;
        float r19929 = r19926 - r19928;
        float r19930 = sqrt(r19929);
        float r19931 = -r19916;
        float r19932 = r19930 + r19931;
        float r19933 = r19932 / r19919;
        float r19934 = r19925 / r19933;
        float r19935 = 6.320733100371715e+112;
        bool r19936 = r19916 <= r19935;
        float r19937 = r19931 / r19927;
        float r19938 = r19927 * r19919;
        float r19939 = r19926 - r19938;
        float r19940 = sqrt(r19939);
        float r19941 = r19940 / r19927;
        float r19942 = r19937 - r19941;
        float r19943 = -2;
        float r19944 = r19916 / r19927;
        float r19945 = r19943 * r19944;
        float r19946 = r19936 ? r19942 : r19945;
        float r19947 = r19924 ? r19934 : r19946;
        float r19948 = r19918 ? r19922 : r19947;
        return r19948;
}

double f_od(double a, double b_2F2, double c) {
        double r19949 = b_2F2;
        double r19950 = -4.525036217684268e+158;
        bool r19951 = r19949 <= r19950;
        double r19952 = c;
        double r19953 = r19952 / r19949;
        double r19954 = -1/2;
        double r19955 = r19953 * r19954;
        double r19956 = -5.266140246506573e-287;
        bool r19957 = r19949 <= r19956;
        double r19958 = 1;
        double r19959 = r19949 * r19949;
        double r19960 = a;
        double r19961 = r19952 * r19960;
        double r19962 = r19959 - r19961;
        double r19963 = sqrt(r19962);
        double r19964 = -r19949;
        double r19965 = r19963 + r19964;
        double r19966 = r19965 / r19952;
        double r19967 = r19958 / r19966;
        double r19968 = 6.320733100371715e+112;
        bool r19969 = r19949 <= r19968;
        double r19970 = r19964 / r19960;
        double r19971 = r19960 * r19952;
        double r19972 = r19959 - r19971;
        double r19973 = sqrt(r19972);
        double r19974 = r19973 / r19960;
        double r19975 = r19970 - r19974;
        double r19976 = -2;
        double r19977 = r19949 / r19960;
        double r19978 = r19976 * r19977;
        double r19979 = r19969 ? r19975 : r19978;
        double r19980 = r19957 ? r19967 : r19979;
        double r19981 = r19951 ? r19955 : r19980;
        return r19981;
}

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 r19982, r19983, r19984, r19985, r19986, r19987, r19988, r19989, r19990, r19991;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3216);
        mpfr_init(r19982);
        mpfr_init(r19983);
        mpfr_init(r19984);
        mpfr_init(r19985);
        mpfr_init(r19986);
        mpfr_init(r19987);
        mpfr_init(r19988);
        mpfr_init(r19989);
        mpfr_init(r19990);
        mpfr_init(r19991);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r19982, b_2F2, MPFR_RNDN);
        mpfr_neg(r19983, r19982, MPFR_RNDN);
        mpfr_mul(r19984, r19982, r19982, MPFR_RNDN);
        mpfr_set_d(r19985, a, MPFR_RNDN);
        mpfr_set_d(r19986, c, MPFR_RNDN);
        mpfr_mul(r19987, r19985, r19986, MPFR_RNDN);
        mpfr_sub(r19988, r19984, r19987, MPFR_RNDN);
        mpfr_sqrt(r19989, r19988, MPFR_RNDN);
        mpfr_sub(r19990, r19983, r19989, MPFR_RNDN);
        mpfr_div(r19991, r19990, r19985, MPFR_RNDN);
        return mpfr_get_d(r19991, MPFR_RNDN);
}

static mpfr_t 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, r20017, r20018, r20019, r20020, r20021, r20022, r20023, r20024;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r19992);
        mpfr_init_set_str(r19993, "-4.525036217684268e+158", 10, MPFR_RNDN);
        mpfr_init(r19994);
        mpfr_init(r19995);
        mpfr_init(r19996);
        mpfr_init_set_str(r19997, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r19998);
        mpfr_init_set_str(r19999, "-5.266140246506573e-287", 10, MPFR_RNDN);
        mpfr_init(r20000);
        mpfr_init_set_str(r20001, "1", 10, MPFR_RNDN);
        mpfr_init(r20002);
        mpfr_init(r20003);
        mpfr_init(r20004);
        mpfr_init(r20005);
        mpfr_init(r20006);
        mpfr_init(r20007);
        mpfr_init(r20008);
        mpfr_init(r20009);
        mpfr_init(r20010);
        mpfr_init_set_str(r20011, "6.320733100371715e+112", 10, MPFR_RNDN);
        mpfr_init(r20012);
        mpfr_init(r20013);
        mpfr_init(r20014);
        mpfr_init(r20015);
        mpfr_init(r20016);
        mpfr_init(r20017);
        mpfr_init(r20018);
        mpfr_init_set_str(r20019, "-2", 10, MPFR_RNDN);
        mpfr_init(r20020);
        mpfr_init(r20021);
        mpfr_init(r20022);
        mpfr_init(r20023);
        mpfr_init(r20024);
}

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

static mpfr_t r20025, r20026, r20027, r20028, r20029, r20030, r20031, r20032, r20033, r20034, r20035, r20036, r20037, r20038, r20039, r20040, r20041, r20042, r20043, r20044, r20045, r20046, r20047, r20048, r20049, r20050, r20051, r20052, r20053, r20054, r20055, r20056, r20057;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r20025);
        mpfr_init_set_str(r20026, "-4.525036217684268e+158", 10, MPFR_RNDN);
        mpfr_init(r20027);
        mpfr_init(r20028);
        mpfr_init(r20029);
        mpfr_init_set_str(r20030, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r20031);
        mpfr_init_set_str(r20032, "-5.266140246506573e-287", 10, MPFR_RNDN);
        mpfr_init(r20033);
        mpfr_init_set_str(r20034, "1", 10, MPFR_RNDN);
        mpfr_init(r20035);
        mpfr_init(r20036);
        mpfr_init(r20037);
        mpfr_init(r20038);
        mpfr_init(r20039);
        mpfr_init(r20040);
        mpfr_init(r20041);
        mpfr_init(r20042);
        mpfr_init(r20043);
        mpfr_init_set_str(r20044, "6.320733100371715e+112", 10, MPFR_RNDN);
        mpfr_init(r20045);
        mpfr_init(r20046);
        mpfr_init(r20047);
        mpfr_init(r20048);
        mpfr_init(r20049);
        mpfr_init(r20050);
        mpfr_init(r20051);
        mpfr_init_set_str(r20052, "-2", 10, MPFR_RNDN);
        mpfr_init(r20053);
        mpfr_init(r20054);
        mpfr_init(r20055);
        mpfr_init(r20056);
        mpfr_init(r20057);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r20025, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r20027, mpfr_cmp(r20025, r20026) <= 0, MPFR_RNDN);
        mpfr_set_d(r20028, c, MPFR_RNDN);
        mpfr_div(r20029, r20028, r20025, MPFR_RNDN);
        ;
        mpfr_mul(r20031, r20029, r20030, MPFR_RNDN);
        ;
        mpfr_set_si(r20033, mpfr_cmp(r20025, r20032) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r20035, r20025, r20025, MPFR_RNDN);
        mpfr_set_d(r20036, a, MPFR_RNDN);
        mpfr_mul(r20037, r20028, r20036, MPFR_RNDN);
        mpfr_sub(r20038, r20035, r20037, MPFR_RNDN);
        mpfr_sqrt(r20039, r20038, MPFR_RNDN);
        mpfr_neg(r20040, r20025, MPFR_RNDN);
        mpfr_add(r20041, r20039, r20040, MPFR_RNDN);
        mpfr_div(r20042, r20041, r20028, MPFR_RNDN);
        mpfr_div(r20043, r20034, r20042, MPFR_RNDN);
        ;
        mpfr_set_si(r20045, mpfr_cmp(r20025, r20044) <= 0, MPFR_RNDN);
        mpfr_div(r20046, r20040, r20036, MPFR_RNDN);
        mpfr_mul(r20047, r20036, r20028, MPFR_RNDN);
        mpfr_sub(r20048, r20035, r20047, MPFR_RNDN);
        mpfr_sqrt(r20049, r20048, MPFR_RNDN);
        mpfr_div(r20050, r20049, r20036, MPFR_RNDN);
        mpfr_sub(r20051, r20046, r20050, MPFR_RNDN);
        ;
        mpfr_div(r20053, r20025, r20036, MPFR_RNDN);
        mpfr_mul(r20054, r20052, r20053, MPFR_RNDN);
        if (mpfr_get_si(r20045, MPFR_RNDN)) { mpfr_set(r20055, r20051, MPFR_RNDN); } else { mpfr_set(r20055, r20054, MPFR_RNDN); };
        if (mpfr_get_si(r20033, MPFR_RNDN)) { mpfr_set(r20056, r20043, MPFR_RNDN); } else { mpfr_set(r20056, r20055, MPFR_RNDN); };
        if (mpfr_get_si(r20027, MPFR_RNDN)) { mpfr_set(r20057, r20031, MPFR_RNDN); } else { mpfr_set(r20057, r20056, MPFR_RNDN); };
        return mpfr_get_d(r20057, MPFR_RNDN);
}

