\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.14194017547317126 \cdot 10^{130}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le 7.481934651249181 \cdot 10^{-117}:\\
\;\;\;\;\frac{1}{\frac{3 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}\\
\mathbf{elif}\;b \le 7.24024992671430264 \cdot 10^{121}:\\
\;\;\;\;\frac{\frac{3 \cdot \left(a \cdot c\right)}{3 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}}{a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r125699 = b;
double r125700 = -r125699;
double r125701 = r125699 * r125699;
double r125702 = 3.0;
double r125703 = a;
double r125704 = r125702 * r125703;
double r125705 = c;
double r125706 = r125704 * r125705;
double r125707 = r125701 - r125706;
double r125708 = sqrt(r125707);
double r125709 = r125700 + r125708;
double r125710 = r125709 / r125704;
return r125710;
}
double f(double a, double b, double c) {
double r125711 = b;
double r125712 = -2.1419401754731713e+130;
bool r125713 = r125711 <= r125712;
double r125714 = 0.5;
double r125715 = c;
double r125716 = r125715 / r125711;
double r125717 = r125714 * r125716;
double r125718 = 0.6666666666666666;
double r125719 = a;
double r125720 = r125711 / r125719;
double r125721 = r125718 * r125720;
double r125722 = r125717 - r125721;
double r125723 = 7.481934651249181e-117;
bool r125724 = r125711 <= r125723;
double r125725 = 1.0;
double r125726 = 3.0;
double r125727 = r125726 * r125719;
double r125728 = -r125711;
double r125729 = r125711 * r125711;
double r125730 = r125727 * r125715;
double r125731 = r125729 - r125730;
double r125732 = sqrt(r125731);
double r125733 = r125728 + r125732;
double r125734 = r125727 / r125733;
double r125735 = r125725 / r125734;
double r125736 = 7.240249926714303e+121;
bool r125737 = r125711 <= r125736;
double r125738 = r125719 * r125715;
double r125739 = r125726 * r125738;
double r125740 = r125728 - r125732;
double r125741 = r125726 * r125740;
double r125742 = r125739 / r125741;
double r125743 = r125742 / r125719;
double r125744 = -0.5;
double r125745 = r125744 * r125716;
double r125746 = r125737 ? r125743 : r125745;
double r125747 = r125724 ? r125735 : r125746;
double r125748 = r125713 ? r125722 : r125747;
return r125748;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -2.1419401754731713e+130Initial program 57.3
Taylor expanded around -inf 3.6
if -2.1419401754731713e+130 < b < 7.481934651249181e-117Initial program 11.0
rmApplied clear-num11.0
if 7.481934651249181e-117 < b < 7.240249926714303e+121Initial program 42.1
rmApplied flip-+42.1
Simplified16.6
rmApplied associate-/r*16.6
Simplified16.7
if 7.240249926714303e+121 < b Initial program 61.0
Taylor expanded around inf 2.1
Final simplification9.3
herbie shell --seed 2020036 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))