\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le 1.7936624356974993 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right) - {b}^{2}}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + b}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r158474 = b;
double r158475 = -r158474;
double r158476 = r158474 * r158474;
double r158477 = 3.0;
double r158478 = a;
double r158479 = r158477 * r158478;
double r158480 = c;
double r158481 = r158479 * r158480;
double r158482 = r158476 - r158481;
double r158483 = sqrt(r158482);
double r158484 = r158475 + r158483;
double r158485 = r158484 / r158479;
return r158485;
}
double f(double a, double b, double c) {
double r158486 = b;
double r158487 = 0.00017936624356974993;
bool r158488 = r158486 <= r158487;
double r158489 = r158486 * r158486;
double r158490 = 3.0;
double r158491 = a;
double r158492 = r158490 * r158491;
double r158493 = c;
double r158494 = r158492 * r158493;
double r158495 = r158489 - r158494;
double r158496 = 2.0;
double r158497 = pow(r158486, r158496);
double r158498 = r158495 - r158497;
double r158499 = sqrt(r158495);
double r158500 = r158499 + r158486;
double r158501 = r158498 / r158500;
double r158502 = r158501 / r158492;
double r158503 = -0.5;
double r158504 = r158493 / r158486;
double r158505 = r158503 * r158504;
double r158506 = r158488 ? r158502 : r158505;
return r158506;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 0.00017936624356974993Initial program 18.4
Simplified18.4
rmApplied flip--18.4
Simplified17.4
if 0.00017936624356974993 < b Initial program 45.7
Simplified45.7
Taylor expanded around inf 10.6
Final simplification11.1
herbie shell --seed 2020047
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))