\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{4 \cdot c}{\left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot 2}double f(double a, double b, double c) {
double r42413 = b;
double r42414 = -r42413;
double r42415 = r42413 * r42413;
double r42416 = 4.0;
double r42417 = a;
double r42418 = r42416 * r42417;
double r42419 = c;
double r42420 = r42418 * r42419;
double r42421 = r42415 - r42420;
double r42422 = sqrt(r42421);
double r42423 = r42414 + r42422;
double r42424 = 2.0;
double r42425 = r42424 * r42417;
double r42426 = r42423 / r42425;
return r42426;
}
double f(double a, double b, double c) {
double r42427 = 4.0;
double r42428 = c;
double r42429 = r42427 * r42428;
double r42430 = b;
double r42431 = -r42430;
double r42432 = r42430 * r42430;
double r42433 = a;
double r42434 = r42427 * r42433;
double r42435 = r42434 * r42428;
double r42436 = r42432 - r42435;
double r42437 = sqrt(r42436);
double r42438 = r42431 - r42437;
double r42439 = 2.0;
double r42440 = r42438 * r42439;
double r42441 = r42429 / r42440;
return r42441;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.2
rmApplied flip-+28.2
Simplified0.5
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.5
rmApplied associate-/r*0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019297
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:precision binary64
:pre (and (< 1.05367121277235087e-8 a 94906265.6242515594) (< 1.05367121277235087e-8 b 94906265.6242515594) (< 1.05367121277235087e-8 c 94906265.6242515594))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))