\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 -4.91962817906715367126033645969528543778 \cdot 10^{153}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le -5.426507427749237535624587160407326811487 \cdot 10^{-260}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}{3}}{a}\\
\mathbf{elif}\;b \le 929319867835151.5:\\
\;\;\;\;\frac{c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r85862 = b;
double r85863 = -r85862;
double r85864 = r85862 * r85862;
double r85865 = 3.0;
double r85866 = a;
double r85867 = r85865 * r85866;
double r85868 = c;
double r85869 = r85867 * r85868;
double r85870 = r85864 - r85869;
double r85871 = sqrt(r85870);
double r85872 = r85863 + r85871;
double r85873 = r85872 / r85867;
return r85873;
}
double f(double a, double b, double c) {
double r85874 = b;
double r85875 = -4.919628179067154e+153;
bool r85876 = r85874 <= r85875;
double r85877 = 0.5;
double r85878 = c;
double r85879 = r85878 / r85874;
double r85880 = r85877 * r85879;
double r85881 = 0.6666666666666666;
double r85882 = a;
double r85883 = r85874 / r85882;
double r85884 = r85881 * r85883;
double r85885 = r85880 - r85884;
double r85886 = -5.4265074277492375e-260;
bool r85887 = r85874 <= r85886;
double r85888 = r85874 * r85874;
double r85889 = 3.0;
double r85890 = r85889 * r85882;
double r85891 = r85890 * r85878;
double r85892 = r85888 - r85891;
double r85893 = sqrt(r85892);
double r85894 = r85893 - r85874;
double r85895 = r85894 / r85889;
double r85896 = r85895 / r85882;
double r85897 = 929319867835151.5;
bool r85898 = r85874 <= r85897;
double r85899 = -r85874;
double r85900 = r85899 - r85893;
double r85901 = r85878 / r85900;
double r85902 = -0.5;
double r85903 = r85902 * r85879;
double r85904 = r85898 ? r85901 : r85903;
double r85905 = r85887 ? r85896 : r85904;
double r85906 = r85876 ? r85885 : r85905;
return r85906;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -4.919628179067154e+153Initial program 63.8
Taylor expanded around -inf 2.6
if -4.919628179067154e+153 < b < -5.4265074277492375e-260Initial program 8.7
Simplified8.7
if -5.4265074277492375e-260 < b < 929319867835151.5Initial program 26.4
rmApplied flip-+26.5
Simplified17.8
rmApplied associate-/r*17.7
Simplified17.7
rmApplied associate-/r*17.7
Simplified17.6
rmApplied *-un-lft-identity17.6
Applied add-sqr-sqrt17.6
Applied times-frac17.6
Applied times-frac14.6
Applied associate-/l*10.6
Simplified10.6
if 929319867835151.5 < b Initial program 56.2
Taylor expanded around inf 5.2
Final simplification7.5
herbie shell --seed 2019208
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))