\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.018762283622710426864404427574628112872 \cdot 10^{102}:\\
\;\;\;\;\frac{1}{3} \cdot \left(1.5 \cdot \frac{c}{b} - 2 \cdot \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.209120745343099452134664059704875392955 \cdot 10^{-70}:\\
\;\;\;\;\frac{\frac{\left(-b\right) + \sqrt{b \cdot b - 3 \cdot \left(a \cdot c\right)}}{3}}{a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r111978 = b;
double r111979 = -r111978;
double r111980 = r111978 * r111978;
double r111981 = 3.0;
double r111982 = a;
double r111983 = r111981 * r111982;
double r111984 = c;
double r111985 = r111983 * r111984;
double r111986 = r111980 - r111985;
double r111987 = sqrt(r111986);
double r111988 = r111979 + r111987;
double r111989 = r111988 / r111983;
return r111989;
}
double f(double a, double b, double c) {
double r111990 = b;
double r111991 = -1.0187622836227104e+102;
bool r111992 = r111990 <= r111991;
double r111993 = 1.0;
double r111994 = 3.0;
double r111995 = r111993 / r111994;
double r111996 = 1.5;
double r111997 = c;
double r111998 = r111997 / r111990;
double r111999 = r111996 * r111998;
double r112000 = 2.0;
double r112001 = a;
double r112002 = r111990 / r112001;
double r112003 = r112000 * r112002;
double r112004 = r111999 - r112003;
double r112005 = r111995 * r112004;
double r112006 = 1.2091207453430995e-70;
bool r112007 = r111990 <= r112006;
double r112008 = -r111990;
double r112009 = r111990 * r111990;
double r112010 = r112001 * r111997;
double r112011 = r111994 * r112010;
double r112012 = r112009 - r112011;
double r112013 = sqrt(r112012);
double r112014 = r112008 + r112013;
double r112015 = r112014 / r111994;
double r112016 = r112015 / r112001;
double r112017 = -0.5;
double r112018 = r112017 * r111998;
double r112019 = r112007 ? r112016 : r112018;
double r112020 = r111992 ? r112005 : r112019;
return r112020;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -1.0187622836227104e+102Initial program 46.9
rmApplied associate-*l*46.9
rmApplied *-un-lft-identity46.9
Applied times-frac47.0
Taylor expanded around -inf 4.1
if -1.0187622836227104e+102 < b < 1.2091207453430995e-70Initial program 13.4
rmApplied associate-*l*13.5
rmApplied associate-/r*13.4
if 1.2091207453430995e-70 < b Initial program 53.7
Taylor expanded around inf 8.7
Final simplification10.1
herbie shell --seed 2020002 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))