\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{4}{\frac{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}{c}}double f(double a, double b, double c) {
double r33469 = b;
double r33470 = -r33469;
double r33471 = r33469 * r33469;
double r33472 = 4.0;
double r33473 = a;
double r33474 = r33472 * r33473;
double r33475 = c;
double r33476 = r33474 * r33475;
double r33477 = r33471 - r33476;
double r33478 = sqrt(r33477);
double r33479 = r33470 + r33478;
double r33480 = 2.0;
double r33481 = r33480 * r33473;
double r33482 = r33479 / r33481;
return r33482;
}
double f(double a, double b, double c) {
double r33483 = 1.0;
double r33484 = 2.0;
double r33485 = r33483 / r33484;
double r33486 = 4.0;
double r33487 = b;
double r33488 = -r33487;
double r33489 = r33487 * r33487;
double r33490 = a;
double r33491 = r33486 * r33490;
double r33492 = c;
double r33493 = r33491 * r33492;
double r33494 = r33489 - r33493;
double r33495 = sqrt(r33494);
double r33496 = r33488 - r33495;
double r33497 = r33483 * r33496;
double r33498 = r33497 / r33492;
double r33499 = r33486 / r33498;
double r33500 = r33485 * r33499;
return r33500;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.4
rmApplied flip-+28.5
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-/l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2020057 +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)))