\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 r30306 = b;
double r30307 = -r30306;
double r30308 = r30306 * r30306;
double r30309 = 4.0;
double r30310 = a;
double r30311 = r30309 * r30310;
double r30312 = c;
double r30313 = r30311 * r30312;
double r30314 = r30308 - r30313;
double r30315 = sqrt(r30314);
double r30316 = r30307 + r30315;
double r30317 = 2.0;
double r30318 = r30317 * r30310;
double r30319 = r30316 / r30318;
return r30319;
}
double f(double a, double b, double c) {
double r30320 = 2.0;
double r30321 = c;
double r30322 = r30320 * r30321;
double r30323 = b;
double r30324 = -r30323;
double r30325 = r30323 * r30323;
double r30326 = 4.0;
double r30327 = a;
double r30328 = r30326 * r30327;
double r30329 = r30328 * r30321;
double r30330 = r30325 - r30329;
double r30331 = sqrt(r30330);
double r30332 = r30324 - r30331;
double r30333 = r30322 / r30332;
return r30333;
}



Bits error versus a



Bits error versus b



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