\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + \left(-b\right)}{3 \cdot a} \le -4.151250236746473 \cdot 10^{-05}:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right) \cdot \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b \cdot \left(b \cdot b\right)}{\mathsf{fma}\left(b, b, \mathsf{fma}\left(b, b, -3 \cdot \left(c \cdot a\right)\right)\right) + b \cdot \sqrt{\mathsf{fma}\left(b, b, -3 \cdot \left(c \cdot a\right)\right)}}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r1076350 = b;
double r1076351 = -r1076350;
double r1076352 = r1076350 * r1076350;
double r1076353 = 3.0;
double r1076354 = a;
double r1076355 = r1076353 * r1076354;
double r1076356 = c;
double r1076357 = r1076355 * r1076356;
double r1076358 = r1076352 - r1076357;
double r1076359 = sqrt(r1076358);
double r1076360 = r1076351 + r1076359;
double r1076361 = r1076360 / r1076355;
return r1076361;
}
double f(double a, double b, double c) {
double r1076362 = b;
double r1076363 = r1076362 * r1076362;
double r1076364 = 3.0;
double r1076365 = a;
double r1076366 = r1076364 * r1076365;
double r1076367 = c;
double r1076368 = r1076366 * r1076367;
double r1076369 = r1076363 - r1076368;
double r1076370 = sqrt(r1076369);
double r1076371 = -r1076362;
double r1076372 = r1076370 + r1076371;
double r1076373 = r1076372 / r1076366;
double r1076374 = -4.151250236746473e-05;
bool r1076375 = r1076373 <= r1076374;
double r1076376 = r1076369 * r1076370;
double r1076377 = r1076362 * r1076363;
double r1076378 = r1076376 - r1076377;
double r1076379 = -3.0;
double r1076380 = r1076367 * r1076365;
double r1076381 = r1076379 * r1076380;
double r1076382 = fma(r1076362, r1076362, r1076381);
double r1076383 = fma(r1076362, r1076362, r1076382);
double r1076384 = sqrt(r1076382);
double r1076385 = r1076362 * r1076384;
double r1076386 = r1076383 + r1076385;
double r1076387 = r1076378 / r1076386;
double r1076388 = r1076387 / r1076366;
double r1076389 = -0.5;
double r1076390 = r1076367 / r1076362;
double r1076391 = r1076389 * r1076390;
double r1076392 = r1076375 ? r1076388 : r1076391;
return r1076392;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)) < -4.151250236746473e-05Initial program 21.1
rmApplied flip3-+21.2
Simplified20.5
Simplified20.5
if -4.151250236746473e-05 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)) Initial program 50.9
Taylor expanded around inf 6.9
Final simplification10.3
herbie shell --seed 2019156 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, 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) (* (* 3 a) c)))) (* 3 a)))