\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{2 \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 r37888 = b;
double r37889 = -r37888;
double r37890 = r37888 * r37888;
double r37891 = 4.0;
double r37892 = a;
double r37893 = r37891 * r37892;
double r37894 = c;
double r37895 = r37893 * r37894;
double r37896 = r37890 - r37895;
double r37897 = sqrt(r37896);
double r37898 = r37889 + r37897;
double r37899 = 2.0;
double r37900 = r37899 * r37892;
double r37901 = r37898 / r37900;
return r37901;
}
double f(double a, double b, double c) {
double r37902 = 2.0;
double r37903 = c;
double r37904 = r37902 * r37903;
double r37905 = b;
double r37906 = -r37905;
double r37907 = r37905 * r37905;
double r37908 = 4.0;
double r37909 = a;
double r37910 = r37908 * r37909;
double r37911 = r37910 * r37903;
double r37912 = r37907 - r37911;
double r37913 = sqrt(r37912);
double r37914 = r37906 - r37913;
double r37915 = r37904 / r37914;
return r37915;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.4
rmApplied flip-+52.4
Simplified0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied associate-/r*0.2
Simplified0.2
Taylor expanded around 0 0.1
Final simplification0.1
herbie shell --seed 2019353 +o rules:numerics
(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)))