\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.49723692525884149 \cdot 10^{-16}:\\
\;\;\;\;\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 r113438 = b;
double r113439 = -r113438;
double r113440 = r113438 * r113438;
double r113441 = 3.0;
double r113442 = a;
double r113443 = r113441 * r113442;
double r113444 = c;
double r113445 = r113443 * r113444;
double r113446 = r113440 - r113445;
double r113447 = sqrt(r113446);
double r113448 = r113439 + r113447;
double r113449 = r113448 / r113443;
return r113449;
}
double f(double a, double b, double c) {
double r113450 = b;
double r113451 = -r113450;
double r113452 = r113450 * r113450;
double r113453 = 3.0;
double r113454 = a;
double r113455 = r113453 * r113454;
double r113456 = c;
double r113457 = r113455 * r113456;
double r113458 = r113452 - r113457;
double r113459 = sqrt(r113458);
double r113460 = r113451 + r113459;
double r113461 = r113460 / r113455;
double r113462 = -1.4972369252588415e-16;
bool r113463 = r113461 <= r113462;
double r113464 = -r113458;
double r113465 = fma(r113450, r113450, r113464);
double r113466 = r113451 - r113459;
double r113467 = r113465 / r113466;
double r113468 = r113467 / r113455;
double r113469 = -0.5;
double r113470 = r113456 / r113450;
double r113471 = r113469 * r113470;
double r113472 = r113463 ? r113468 : r113471;
return r113472;
}



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.4972369252588415e-16Initial program 24.1
rmApplied flip-+24.1
Simplified23.3
if -1.4972369252588415e-16 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 59.7
Taylor expanded around inf 1.3
Final simplification5.6
herbie shell --seed 2020057 +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)))