\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{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3}}{a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r118844 = b;
double r118845 = -r118844;
double r118846 = r118844 * r118844;
double r118847 = 3.0;
double r118848 = a;
double r118849 = r118847 * r118848;
double r118850 = c;
double r118851 = r118849 * r118850;
double r118852 = r118846 - r118851;
double r118853 = sqrt(r118852);
double r118854 = r118845 + r118853;
double r118855 = r118854 / r118849;
return r118855;
}
double f(double a, double b, double c) {
double r118856 = b;
double r118857 = -1.361733299857302e+105;
bool r118858 = r118856 <= r118857;
double r118859 = 0.5;
double r118860 = c;
double r118861 = r118860 / r118856;
double r118862 = r118859 * r118861;
double r118863 = 0.6666666666666666;
double r118864 = a;
double r118865 = r118856 / r118864;
double r118866 = r118863 * r118865;
double r118867 = r118862 - r118866;
double r118868 = 3.091361180800597e-86;
bool r118869 = r118856 <= r118868;
double r118870 = -r118856;
double r118871 = r118856 * r118856;
double r118872 = 3.0;
double r118873 = r118872 * r118864;
double r118874 = r118873 * r118860;
double r118875 = r118871 - r118874;
double r118876 = sqrt(r118875);
double r118877 = r118870 + r118876;
double r118878 = r118877 / r118872;
double r118879 = r118878 / r118864;
double r118880 = -0.5;
double r118881 = r118880 * r118861;
double r118882 = r118869 ? r118879 : r118881;
double r118883 = r118858 ? r118867 : r118882;
return r118883;
}



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
if 3.091361180800597e-86 < b Initial program 51.9
Taylor expanded around inf 10.7
Final simplification10.4
herbie shell --seed 2019322
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))