\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.1755425336568303684714464907301589846611:\\
\;\;\;\;\frac{\sqrt{\mathsf{fma}\left(b, b, -\left(3 \cdot a\right) \cdot c\right)} - b}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1.5}{3} \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r81365 = b;
double r81366 = -r81365;
double r81367 = r81365 * r81365;
double r81368 = 3.0;
double r81369 = a;
double r81370 = r81368 * r81369;
double r81371 = c;
double r81372 = r81370 * r81371;
double r81373 = r81367 - r81372;
double r81374 = sqrt(r81373);
double r81375 = r81366 + r81374;
double r81376 = r81375 / r81370;
return r81376;
}
double f(double a, double b, double c) {
double r81377 = b;
double r81378 = 0.17554253365683037;
bool r81379 = r81377 <= r81378;
double r81380 = 3.0;
double r81381 = a;
double r81382 = r81380 * r81381;
double r81383 = c;
double r81384 = r81382 * r81383;
double r81385 = -r81384;
double r81386 = fma(r81377, r81377, r81385);
double r81387 = sqrt(r81386);
double r81388 = r81387 - r81377;
double r81389 = r81388 / r81382;
double r81390 = -1.5;
double r81391 = r81390 / r81380;
double r81392 = r81383 / r81377;
double r81393 = r81391 * r81392;
double r81394 = r81379 ? r81389 : r81393;
return r81394;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 0.17554253365683037Initial program 23.3
Simplified23.3
rmApplied fma-neg23.2
if 0.17554253365683037 < b Initial program 47.5
Simplified47.5
Taylor expanded around inf 9.7
rmApplied times-frac9.6
Taylor expanded around 0 9.4
Final simplification11.3
herbie shell --seed 2019322 +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)))