\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 0.01334404880395557:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(c \cdot a, -4, b \cdot b\right)} \cdot \mathsf{fma}\left(c \cdot a, -4, b \cdot b\right) - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(\sqrt{\mathsf{fma}\left(c \cdot a, -4, b \cdot b\right)}, b + \sqrt{\mathsf{fma}\left(c \cdot a, -4, b \cdot b\right)}, b \cdot b\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \mathsf{expm1}\left(\sqrt{\mathsf{log1p}\left(\frac{c \cdot a}{b}\right)} \cdot \sqrt{\mathsf{log1p}\left(\frac{c \cdot a}{b}\right)}\right)}{2 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r2033393 = b;
double r2033394 = -r2033393;
double r2033395 = r2033393 * r2033393;
double r2033396 = 4.0;
double r2033397 = a;
double r2033398 = r2033396 * r2033397;
double r2033399 = c;
double r2033400 = r2033398 * r2033399;
double r2033401 = r2033395 - r2033400;
double r2033402 = sqrt(r2033401);
double r2033403 = r2033394 + r2033402;
double r2033404 = 2.0;
double r2033405 = r2033404 * r2033397;
double r2033406 = r2033403 / r2033405;
return r2033406;
}
double f(double a, double b, double c) {
double r2033407 = b;
double r2033408 = 0.01334404880395557;
bool r2033409 = r2033407 <= r2033408;
double r2033410 = c;
double r2033411 = a;
double r2033412 = r2033410 * r2033411;
double r2033413 = -4.0;
double r2033414 = r2033407 * r2033407;
double r2033415 = fma(r2033412, r2033413, r2033414);
double r2033416 = sqrt(r2033415);
double r2033417 = r2033416 * r2033415;
double r2033418 = r2033414 * r2033407;
double r2033419 = r2033417 - r2033418;
double r2033420 = r2033407 + r2033416;
double r2033421 = fma(r2033416, r2033420, r2033414);
double r2033422 = r2033419 / r2033421;
double r2033423 = 2.0;
double r2033424 = r2033423 * r2033411;
double r2033425 = r2033422 / r2033424;
double r2033426 = -2.0;
double r2033427 = r2033412 / r2033407;
double r2033428 = log1p(r2033427);
double r2033429 = sqrt(r2033428);
double r2033430 = r2033429 * r2033429;
double r2033431 = expm1(r2033430);
double r2033432 = r2033426 * r2033431;
double r2033433 = r2033432 / r2033424;
double r2033434 = r2033409 ? r2033425 : r2033433;
return r2033434;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 0.01334404880395557Initial program 22.1
rmApplied flip3-+22.2
Simplified21.5
Simplified21.5
if 0.01334404880395557 < b Initial program 46.5
Taylor expanded around inf 10.2
rmApplied expm1-log1p-u10.2
rmApplied add-sqr-sqrt10.4
Final simplification11.6
herbie shell --seed 2019141 +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)))