\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 5.343652512340826 \cdot 10^{-05}:\\
\;\;\;\;\frac{\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} \cdot \mathsf{fma}\left(a \cdot c, -4, b \cdot b\right) - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(b, \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}, b \cdot b + \mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)\right)}}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r1819280 = b;
double r1819281 = -r1819280;
double r1819282 = r1819280 * r1819280;
double r1819283 = 4.0;
double r1819284 = a;
double r1819285 = r1819283 * r1819284;
double r1819286 = c;
double r1819287 = r1819285 * r1819286;
double r1819288 = r1819282 - r1819287;
double r1819289 = sqrt(r1819288);
double r1819290 = r1819281 + r1819289;
double r1819291 = 2.0;
double r1819292 = r1819291 * r1819284;
double r1819293 = r1819290 / r1819292;
return r1819293;
}
double f(double a, double b, double c) {
double r1819294 = b;
double r1819295 = 5.343652512340826e-05;
bool r1819296 = r1819294 <= r1819295;
double r1819297 = a;
double r1819298 = c;
double r1819299 = r1819297 * r1819298;
double r1819300 = -4.0;
double r1819301 = r1819294 * r1819294;
double r1819302 = fma(r1819299, r1819300, r1819301);
double r1819303 = sqrt(r1819302);
double r1819304 = r1819303 * r1819302;
double r1819305 = r1819301 * r1819294;
double r1819306 = r1819304 - r1819305;
double r1819307 = r1819301 + r1819302;
double r1819308 = fma(r1819294, r1819303, r1819307);
double r1819309 = r1819306 / r1819308;
double r1819310 = r1819309 / r1819297;
double r1819311 = 2.0;
double r1819312 = r1819310 / r1819311;
double r1819313 = -2.0;
double r1819314 = r1819298 / r1819294;
double r1819315 = r1819313 * r1819314;
double r1819316 = r1819315 / r1819311;
double r1819317 = r1819296 ? r1819312 : r1819316;
return r1819317;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 5.343652512340826e-05Initial program 18.1
Simplified18.1
rmApplied flip3--18.2
Simplified17.5
Simplified17.5
if 5.343652512340826e-05 < b Initial program 45.7
Simplified45.7
Taylor expanded around inf 10.6
Final simplification11.0
herbie shell --seed 2019142 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, medium range"
:pre (and (< 1.1102230246251565e-16 a 9007199254740992.0) (< 1.1102230246251565e-16 b 9007199254740992.0) (< 1.1102230246251565e-16 c 9007199254740992.0))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))