\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.2724541866372811 \cdot 10^{165}:\\
\;\;\;\;\frac{\frac{\frac{1}{2} \cdot \left(a \cdot \left(3 \cdot c\right)\right)}{b} - 2 \cdot b}{3 \cdot a}\\
\mathbf{elif}\;b \le 1.72707344940377835 \cdot 10^{-162}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b + \left(3 \cdot a\right) \cdot \left(-c\right)}}{3 \cdot a}\\
\mathbf{elif}\;b \le 2.0964838406867355 \cdot 10^{136}:\\
\;\;\;\;\frac{\frac{b \cdot \left(b - b\right) + 3 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{b \cdot b - 3 \cdot \left(a \cdot c\right)}}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1.5 \cdot \frac{a \cdot c}{b}}{3 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r125028 = b;
double r125029 = -r125028;
double r125030 = r125028 * r125028;
double r125031 = 3.0;
double r125032 = a;
double r125033 = r125031 * r125032;
double r125034 = c;
double r125035 = r125033 * r125034;
double r125036 = r125030 - r125035;
double r125037 = sqrt(r125036);
double r125038 = r125029 + r125037;
double r125039 = r125038 / r125033;
return r125039;
}
double f(double a, double b, double c) {
double r125040 = b;
double r125041 = -2.272454186637281e+165;
bool r125042 = r125040 <= r125041;
double r125043 = 0.5;
double r125044 = a;
double r125045 = 3.0;
double r125046 = c;
double r125047 = r125045 * r125046;
double r125048 = r125044 * r125047;
double r125049 = r125043 * r125048;
double r125050 = r125049 / r125040;
double r125051 = 2.0;
double r125052 = r125051 * r125040;
double r125053 = r125050 - r125052;
double r125054 = r125045 * r125044;
double r125055 = r125053 / r125054;
double r125056 = 1.7270734494037783e-162;
bool r125057 = r125040 <= r125056;
double r125058 = -r125040;
double r125059 = r125040 * r125040;
double r125060 = -r125046;
double r125061 = r125054 * r125060;
double r125062 = r125059 + r125061;
double r125063 = sqrt(r125062);
double r125064 = r125058 + r125063;
double r125065 = r125064 / r125054;
double r125066 = 2.0964838406867355e+136;
bool r125067 = r125040 <= r125066;
double r125068 = r125040 - r125040;
double r125069 = r125040 * r125068;
double r125070 = r125044 * r125046;
double r125071 = r125045 * r125070;
double r125072 = r125069 + r125071;
double r125073 = r125059 - r125071;
double r125074 = sqrt(r125073);
double r125075 = r125058 - r125074;
double r125076 = r125072 / r125075;
double r125077 = r125076 / r125054;
double r125078 = -1.5;
double r125079 = r125070 / r125040;
double r125080 = r125078 * r125079;
double r125081 = r125080 / r125054;
double r125082 = r125067 ? r125077 : r125081;
double r125083 = r125057 ? r125065 : r125082;
double r125084 = r125042 ? r125055 : r125083;
return r125084;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -2.272454186637281e+165Initial program 64.0
rmApplied associate-*l*64.0
rmApplied add-sqr-sqrt64.0
Applied associate-*l*64.0
Taylor expanded around -inf 10.6
Simplified10.6
if -2.272454186637281e+165 < b < 1.7270734494037783e-162Initial program 11.1
rmApplied add-cube-cbrt11.4
Applied associate-*r*11.4
rmApplied sub-neg11.4
Simplified11.1
if 1.7270734494037783e-162 < b < 2.0964838406867355e+136Initial program 39.9
rmApplied associate-*l*39.9
rmApplied add-sqr-sqrt40.0
Applied associate-*l*40.0
rmApplied flip-+40.0
Simplified16.6
Simplified16.6
if 2.0964838406867355e+136 < b Initial program 62.0
Taylor expanded around inf 14.3
Final simplification13.0
herbie shell --seed 2020047
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))