\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.2922524578506893 \cdot 10^{+141}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{c}{b} - \frac{b}{a} \cdot \frac{2}{3}\\
\mathbf{elif}\;b \le 4.35366028427847 \cdot 10^{-60}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - 3 \cdot \left(c \cdot a\right)} - b}{3}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c, double __attribute__((unused)) d) {
double r21709977 = b;
double r21709978 = -r21709977;
double r21709979 = r21709977 * r21709977;
double r21709980 = 3.0;
double r21709981 = a;
double r21709982 = r21709980 * r21709981;
double r21709983 = c;
double r21709984 = r21709982 * r21709983;
double r21709985 = r21709979 - r21709984;
double r21709986 = sqrt(r21709985);
double r21709987 = r21709978 + r21709986;
double r21709988 = r21709987 / r21709982;
return r21709988;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r21709989 = b;
double r21709990 = -2.2922524578506893e+141;
bool r21709991 = r21709989 <= r21709990;
double r21709992 = 0.5;
double r21709993 = c;
double r21709994 = r21709993 / r21709989;
double r21709995 = r21709992 * r21709994;
double r21709996 = a;
double r21709997 = r21709989 / r21709996;
double r21709998 = 0.6666666666666666;
double r21709999 = r21709997 * r21709998;
double r21710000 = r21709995 - r21709999;
double r21710001 = 4.35366028427847e-60;
bool r21710002 = r21709989 <= r21710001;
double r21710003 = r21709989 * r21709989;
double r21710004 = 3.0;
double r21710005 = r21709993 * r21709996;
double r21710006 = r21710004 * r21710005;
double r21710007 = r21710003 - r21710006;
double r21710008 = sqrt(r21710007);
double r21710009 = r21710008 - r21709989;
double r21710010 = r21710009 / r21710004;
double r21710011 = r21710010 / r21709996;
double r21710012 = -0.5;
double r21710013 = r21710012 * r21709994;
double r21710014 = r21710002 ? r21710011 : r21710013;
double r21710015 = r21709991 ? r21710000 : r21710014;
return r21710015;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
Results
if b < -2.2922524578506893e+141Initial program 55.9
Simplified55.9
Taylor expanded around -inf 2.5
if -2.2922524578506893e+141 < b < 4.35366028427847e-60Initial program 13.2
Simplified13.2
rmApplied associate-/r*13.2
rmApplied associate-*l*13.1
if 4.35366028427847e-60 < b Initial program 52.8
Simplified52.8
Taylor expanded around inf 8.8
Final simplification10.3
herbie shell --seed 2019120
(FPCore (a b c d)
:name "Cubic critical"
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))