\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{1}{\frac{2}{4} \cdot \frac{1}{c}}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r42267 = b;
double r42268 = -r42267;
double r42269 = r42267 * r42267;
double r42270 = 4.0;
double r42271 = a;
double r42272 = r42270 * r42271;
double r42273 = c;
double r42274 = r42272 * r42273;
double r42275 = r42269 - r42274;
double r42276 = sqrt(r42275);
double r42277 = r42268 + r42276;
double r42278 = 2.0;
double r42279 = r42278 * r42271;
double r42280 = r42277 / r42279;
return r42280;
}
double f(double a, double b, double c) {
double r42281 = 1.0;
double r42282 = 2.0;
double r42283 = 4.0;
double r42284 = r42282 / r42283;
double r42285 = c;
double r42286 = r42281 / r42285;
double r42287 = r42284 * r42286;
double r42288 = r42281 / r42287;
double r42289 = b;
double r42290 = -r42289;
double r42291 = r42289 * r42289;
double r42292 = a;
double r42293 = r42283 * r42292;
double r42294 = r42293 * r42285;
double r42295 = r42291 - r42294;
double r42296 = sqrt(r42295);
double r42297 = r42290 - r42296;
double r42298 = r42288 / r42297;
return r42298;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.2
rmApplied flip-+28.2
Simplified0.4
rmApplied clear-num0.5
Simplified0.5
rmApplied associate-/r/0.5
Applied associate-/r*0.4
rmApplied times-frac0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019209
(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)))