\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a} \le -1.55970767520646545 \cdot 10^{-5}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(b, b, -\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right)\right)}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r75357 = b;
double r75358 = -r75357;
double r75359 = r75357 * r75357;
double r75360 = 3.0;
double r75361 = a;
double r75362 = r75360 * r75361;
double r75363 = c;
double r75364 = r75362 * r75363;
double r75365 = r75359 - r75364;
double r75366 = sqrt(r75365);
double r75367 = r75358 + r75366;
double r75368 = r75367 / r75362;
return r75368;
}
double f(double a, double b, double c) {
double r75369 = b;
double r75370 = -r75369;
double r75371 = r75369 * r75369;
double r75372 = 3.0;
double r75373 = a;
double r75374 = r75372 * r75373;
double r75375 = c;
double r75376 = r75374 * r75375;
double r75377 = r75371 - r75376;
double r75378 = sqrt(r75377);
double r75379 = r75370 + r75378;
double r75380 = r75379 / r75374;
double r75381 = -1.5597076752064655e-05;
bool r75382 = r75380 <= r75381;
double r75383 = -r75377;
double r75384 = fma(r75369, r75369, r75383);
double r75385 = r75370 - r75378;
double r75386 = r75384 / r75385;
double r75387 = r75386 / r75374;
double r75388 = -0.5;
double r75389 = r75375 / r75369;
double r75390 = r75388 * r75389;
double r75391 = r75382 ? r75387 : r75390;
return r75391;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -1.5597076752064655e-05Initial program 22.5
rmApplied flip-+22.5
Simplified21.8
if -1.5597076752064655e-05 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 57.0
Taylor expanded around inf 3.2
Final simplification5.5
herbie shell --seed 2020064 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))