\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{\frac{4 \cdot \left(a \cdot c\right)}{a}}{-\left(\sqrt{\mathsf{fma}\left(b, b, 0 - 4 \cdot \left(a \cdot c\right)\right)} + b\right)}double f(double a, double b, double c) {
double r37288 = b;
double r37289 = -r37288;
double r37290 = r37288 * r37288;
double r37291 = 4.0;
double r37292 = a;
double r37293 = r37291 * r37292;
double r37294 = c;
double r37295 = r37293 * r37294;
double r37296 = r37290 - r37295;
double r37297 = sqrt(r37296);
double r37298 = r37289 + r37297;
double r37299 = 2.0;
double r37300 = r37299 * r37292;
double r37301 = r37298 / r37300;
return r37301;
}
double f(double a, double b, double c) {
double r37302 = 1.0;
double r37303 = 2.0;
double r37304 = r37302 / r37303;
double r37305 = 4.0;
double r37306 = a;
double r37307 = c;
double r37308 = r37306 * r37307;
double r37309 = r37305 * r37308;
double r37310 = r37309 / r37306;
double r37311 = b;
double r37312 = 0.0;
double r37313 = r37312 - r37309;
double r37314 = fma(r37311, r37311, r37313);
double r37315 = sqrt(r37314);
double r37316 = r37315 + r37311;
double r37317 = -r37316;
double r37318 = r37310 / r37317;
double r37319 = r37304 * r37318;
return r37319;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 28.5
rmApplied flip-+28.5
Simplified0.5
rmApplied fma-neg0.5
Simplified0.5
rmApplied add-sqr-sqrt0.5
Applied sqrt-prod0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Simplified0.3
Final simplification0.3
herbie shell --seed 2020001 +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)))