\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 589.4945414498508853284874930977821350098:\\
\;\;\;\;\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 r24417 = b;
double r24418 = -r24417;
double r24419 = r24417 * r24417;
double r24420 = 4.0;
double r24421 = a;
double r24422 = r24420 * r24421;
double r24423 = c;
double r24424 = r24422 * r24423;
double r24425 = r24419 - r24424;
double r24426 = sqrt(r24425);
double r24427 = r24418 + r24426;
double r24428 = 2.0;
double r24429 = r24428 * r24421;
double r24430 = r24427 / r24429;
return r24430;
}
double f(double a, double b, double c) {
double r24431 = b;
double r24432 = 589.4945414498509;
bool r24433 = r24431 <= r24432;
double r24434 = r24431 * r24431;
double r24435 = 4.0;
double r24436 = a;
double r24437 = r24435 * r24436;
double r24438 = c;
double r24439 = r24437 * r24438;
double r24440 = fma(r24431, r24431, r24439);
double r24441 = r24434 - r24440;
double r24442 = r24434 - r24439;
double r24443 = sqrt(r24442);
double r24444 = r24443 + r24431;
double r24445 = r24441 / r24444;
double r24446 = 2.0;
double r24447 = r24446 * r24436;
double r24448 = r24445 / r24447;
double r24449 = -1.0;
double r24450 = r24438 / r24431;
double r24451 = r24449 * r24450;
double r24452 = r24433 ? r24448 : r24451;
return r24452;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 589.4945414498509Initial program 16.7
Simplified16.7
rmApplied flip--16.7
Simplified15.9
if 589.4945414498509 < b Initial program 36.2
Simplified36.2
Taylor expanded around inf 16.3
Final simplification16.2
herbie shell --seed 2019347 +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)))