\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 -2.675733832275465886979422961103066713356 \cdot 10^{144}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le 8.955698051059873403585681401912267705382 \cdot 10^{-30}:\\
\;\;\;\;\frac{1}{3} \cdot \frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r132732 = b;
double r132733 = -r132732;
double r132734 = r132732 * r132732;
double r132735 = 3.0;
double r132736 = a;
double r132737 = r132735 * r132736;
double r132738 = c;
double r132739 = r132737 * r132738;
double r132740 = r132734 - r132739;
double r132741 = sqrt(r132740);
double r132742 = r132733 + r132741;
double r132743 = r132742 / r132737;
return r132743;
}
double f(double a, double b, double c) {
double r132744 = b;
double r132745 = -2.675733832275466e+144;
bool r132746 = r132744 <= r132745;
double r132747 = 0.5;
double r132748 = c;
double r132749 = r132748 / r132744;
double r132750 = r132747 * r132749;
double r132751 = 0.6666666666666666;
double r132752 = a;
double r132753 = r132744 / r132752;
double r132754 = r132751 * r132753;
double r132755 = r132750 - r132754;
double r132756 = 8.955698051059873e-30;
bool r132757 = r132744 <= r132756;
double r132758 = 1.0;
double r132759 = 3.0;
double r132760 = r132758 / r132759;
double r132761 = -r132744;
double r132762 = r132744 * r132744;
double r132763 = r132759 * r132752;
double r132764 = r132763 * r132748;
double r132765 = r132762 - r132764;
double r132766 = sqrt(r132765);
double r132767 = r132761 + r132766;
double r132768 = r132767 / r132752;
double r132769 = r132760 * r132768;
double r132770 = -0.5;
double r132771 = r132770 * r132749;
double r132772 = r132757 ? r132769 : r132771;
double r132773 = r132746 ? r132755 : r132772;
return r132773;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -2.675733832275466e+144Initial program 60.4
Taylor expanded around -inf 2.3
if -2.675733832275466e+144 < b < 8.955698051059873e-30Initial program 14.2
rmApplied *-un-lft-identity14.2
Applied times-frac14.3
if 8.955698051059873e-30 < b Initial program 54.7
Taylor expanded around inf 6.9
Final simplification10.2
herbie shell --seed 2019354
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))