\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 0.4445338611362734115850514626799849793315:\\
\;\;\;\;\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, \left(3 \cdot a\right) \cdot c\right)}{\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 r88406 = b;
double r88407 = -r88406;
double r88408 = r88406 * r88406;
double r88409 = 3.0;
double r88410 = a;
double r88411 = r88409 * r88410;
double r88412 = c;
double r88413 = r88411 * r88412;
double r88414 = r88408 - r88413;
double r88415 = sqrt(r88414);
double r88416 = r88407 + r88415;
double r88417 = r88416 / r88411;
return r88417;
}
double f(double a, double b, double c) {
double r88418 = b;
double r88419 = 0.4445338611362734;
bool r88420 = r88418 <= r88419;
double r88421 = r88418 * r88418;
double r88422 = 3.0;
double r88423 = a;
double r88424 = r88422 * r88423;
double r88425 = c;
double r88426 = r88424 * r88425;
double r88427 = fma(r88418, r88418, r88426);
double r88428 = r88421 - r88427;
double r88429 = r88421 - r88426;
double r88430 = sqrt(r88429);
double r88431 = r88430 + r88418;
double r88432 = r88428 / r88431;
double r88433 = r88432 / r88424;
double r88434 = -0.5;
double r88435 = r88425 / r88418;
double r88436 = r88434 * r88435;
double r88437 = r88420 ? r88433 : r88436;
return r88437;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 0.4445338611362734Initial program 23.1
Simplified23.1
rmApplied flip--23.1
Simplified22.4
if 0.4445338611362734 < b Initial program 47.2
Simplified47.2
Taylor expanded around inf 9.6
Final simplification11.5
herbie shell --seed 2019323 +o rules:numerics
(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)))