\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le 22199.5756480432464741170406341552734375:\\
\;\;\;\;\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, \left(4 \cdot a\right) \cdot c\right)}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + b}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r28314 = b;
double r28315 = -r28314;
double r28316 = r28314 * r28314;
double r28317 = 4.0;
double r28318 = a;
double r28319 = r28317 * r28318;
double r28320 = c;
double r28321 = r28319 * r28320;
double r28322 = r28316 - r28321;
double r28323 = sqrt(r28322);
double r28324 = r28315 + r28323;
double r28325 = 2.0;
double r28326 = r28325 * r28318;
double r28327 = r28324 / r28326;
return r28327;
}
double f(double a, double b, double c) {
double r28328 = b;
double r28329 = 22199.575648043246;
bool r28330 = r28328 <= r28329;
double r28331 = r28328 * r28328;
double r28332 = 4.0;
double r28333 = a;
double r28334 = r28332 * r28333;
double r28335 = c;
double r28336 = r28334 * r28335;
double r28337 = fma(r28328, r28328, r28336);
double r28338 = r28331 - r28337;
double r28339 = r28331 - r28336;
double r28340 = sqrt(r28339);
double r28341 = r28340 + r28328;
double r28342 = r28338 / r28341;
double r28343 = 2.0;
double r28344 = r28343 * r28333;
double r28345 = r28342 / r28344;
double r28346 = -1.0;
double r28347 = r28335 / r28328;
double r28348 = r28346 * r28347;
double r28349 = r28330 ? r28345 : r28348;
return r28349;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 22199.575648043246Initial program 20.1
Simplified20.1
rmApplied flip--20.0
Simplified19.3
if 22199.575648043246 < b Initial program 39.0
Simplified39.0
Taylor expanded around inf 14.1
rmApplied clear-num14.1
Taylor expanded around 0 14.0
Final simplification16.9
herbie shell --seed 2019325 +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)))