\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 -1.361733299857302083043096878302889042354 \cdot 10^{105}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le 3.09136118080059703772253670927164991568 \cdot 10^{-86}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}{3}}{a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r120626 = b;
double r120627 = -r120626;
double r120628 = r120626 * r120626;
double r120629 = 3.0;
double r120630 = a;
double r120631 = r120629 * r120630;
double r120632 = c;
double r120633 = r120631 * r120632;
double r120634 = r120628 - r120633;
double r120635 = sqrt(r120634);
double r120636 = r120627 + r120635;
double r120637 = r120636 / r120631;
return r120637;
}
double f(double a, double b, double c) {
double r120638 = b;
double r120639 = -1.361733299857302e+105;
bool r120640 = r120638 <= r120639;
double r120641 = 0.5;
double r120642 = c;
double r120643 = r120642 / r120638;
double r120644 = r120641 * r120643;
double r120645 = 0.6666666666666666;
double r120646 = a;
double r120647 = r120638 / r120646;
double r120648 = r120645 * r120647;
double r120649 = r120644 - r120648;
double r120650 = 3.091361180800597e-86;
bool r120651 = r120638 <= r120650;
double r120652 = r120638 * r120638;
double r120653 = 3.0;
double r120654 = r120653 * r120646;
double r120655 = r120654 * r120642;
double r120656 = r120652 - r120655;
double r120657 = sqrt(r120656);
double r120658 = r120657 - r120638;
double r120659 = r120658 / r120653;
double r120660 = r120659 / r120646;
double r120661 = -0.5;
double r120662 = r120661 * r120643;
double r120663 = r120651 ? r120660 : r120662;
double r120664 = r120640 ? r120649 : r120663;
return r120664;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -1.361733299857302e+105Initial program 48.6
Taylor expanded around -inf 4.0
if -1.361733299857302e+105 < b < 3.091361180800597e-86Initial program 12.2
rmApplied associate-/r*12.3
Simplified12.3
if 3.091361180800597e-86 < b Initial program 51.9
Taylor expanded around inf 10.7
Final simplification10.4
herbie shell --seed 2019322 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))