\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{\frac{4 \cdot \left(a \cdot c\right)}{2}}{a}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r39443 = b;
double r39444 = -r39443;
double r39445 = r39443 * r39443;
double r39446 = 4.0;
double r39447 = a;
double r39448 = r39446 * r39447;
double r39449 = c;
double r39450 = r39448 * r39449;
double r39451 = r39445 - r39450;
double r39452 = sqrt(r39451);
double r39453 = r39444 + r39452;
double r39454 = 2.0;
double r39455 = r39454 * r39447;
double r39456 = r39453 / r39455;
return r39456;
}
double f(double a, double b, double c) {
double r39457 = 4.0;
double r39458 = a;
double r39459 = c;
double r39460 = r39458 * r39459;
double r39461 = r39457 * r39460;
double r39462 = 2.0;
double r39463 = r39461 / r39462;
double r39464 = r39463 / r39458;
double r39465 = b;
double r39466 = -r39465;
double r39467 = r39465 * r39465;
double r39468 = r39457 * r39458;
double r39469 = r39468 * r39459;
double r39470 = r39467 - r39469;
double r39471 = sqrt(r39470);
double r39472 = r39466 - r39471;
double r39473 = r39464 / r39472;
return r39473;
}



Bits error versus a



Bits error versus b



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