\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 -0.212525963561097569:\\
\;\;\;\;\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 r109624 = b;
double r109625 = -r109624;
double r109626 = r109624 * r109624;
double r109627 = 3.0;
double r109628 = a;
double r109629 = r109627 * r109628;
double r109630 = c;
double r109631 = r109629 * r109630;
double r109632 = r109626 - r109631;
double r109633 = sqrt(r109632);
double r109634 = r109625 + r109633;
double r109635 = r109634 / r109629;
return r109635;
}
double f(double a, double b, double c) {
double r109636 = b;
double r109637 = -r109636;
double r109638 = r109636 * r109636;
double r109639 = 3.0;
double r109640 = a;
double r109641 = r109639 * r109640;
double r109642 = c;
double r109643 = r109641 * r109642;
double r109644 = r109638 - r109643;
double r109645 = sqrt(r109644);
double r109646 = r109637 + r109645;
double r109647 = r109646 / r109641;
double r109648 = -0.21252596356109757;
bool r109649 = r109647 <= r109648;
double r109650 = -r109644;
double r109651 = fma(r109636, r109636, r109650);
double r109652 = r109637 - r109645;
double r109653 = r109651 / r109652;
double r109654 = r109653 / r109641;
double r109655 = -0.5;
double r109656 = r109642 / r109636;
double r109657 = r109655 * r109656;
double r109658 = r109649 ? r109654 : r109657;
return r109658;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -0.21252596356109757Initial program 19.4
rmApplied flip-+19.4
Simplified18.6
if -0.21252596356109757 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 48.1
Taylor expanded around inf 8.9
Final simplification10.4
herbie shell --seed 2020046 +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)))