\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{4 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r36880 = b;
double r36881 = -r36880;
double r36882 = r36880 * r36880;
double r36883 = 4.0;
double r36884 = a;
double r36885 = r36883 * r36884;
double r36886 = c;
double r36887 = r36885 * r36886;
double r36888 = r36882 - r36887;
double r36889 = sqrt(r36888);
double r36890 = r36881 + r36889;
double r36891 = 2.0;
double r36892 = r36891 * r36884;
double r36893 = r36890 / r36892;
return r36893;
}
double f(double a, double b, double c) {
double r36894 = 1.0;
double r36895 = 2.0;
double r36896 = r36894 / r36895;
double r36897 = 4.0;
double r36898 = c;
double r36899 = r36897 * r36898;
double r36900 = b;
double r36901 = -r36900;
double r36902 = r36900 * r36900;
double r36903 = a;
double r36904 = r36897 * r36903;
double r36905 = r36904 * r36898;
double r36906 = r36902 - r36905;
double r36907 = sqrt(r36906);
double r36908 = r36901 - r36907;
double r36909 = r36899 / r36908;
double r36910 = r36896 * r36909;
return r36910;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.8
rmApplied flip-+52.8
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.4
rmApplied associate-/r*0.2
rmApplied *-un-lft-identity0.2
Applied associate-/r*0.2
Simplified0.1
Final simplification0.1
herbie shell --seed 2020057
(FPCore (a b c)
:name "Quadratic roots, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))