\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.063770735185840945354498847982543421727 \cdot 10^{112}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le -3.960211999483477631208781586663998392671 \cdot 10^{-305}:\\
\;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\
\mathbf{elif}\;b \le 3.424603050151593475509461695672638978245 \cdot 10^{-29}:\\
\;\;\;\;\frac{1}{\frac{a \cdot 3}{\frac{-c}{\frac{\sqrt{\mathsf{fma}\left(3 \cdot a, -c, {b}^{2}\right)} + b}{3 \cdot a}}}}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r83015 = b;
double r83016 = -r83015;
double r83017 = r83015 * r83015;
double r83018 = 3.0;
double r83019 = a;
double r83020 = r83018 * r83019;
double r83021 = c;
double r83022 = r83020 * r83021;
double r83023 = r83017 - r83022;
double r83024 = sqrt(r83023);
double r83025 = r83016 + r83024;
double r83026 = r83025 / r83020;
return r83026;
}
double f(double a, double b, double c) {
double r83027 = b;
double r83028 = -2.063770735185841e+112;
bool r83029 = r83027 <= r83028;
double r83030 = 0.5;
double r83031 = c;
double r83032 = r83031 / r83027;
double r83033 = r83030 * r83032;
double r83034 = 0.6666666666666666;
double r83035 = a;
double r83036 = r83027 / r83035;
double r83037 = r83034 * r83036;
double r83038 = r83033 - r83037;
double r83039 = -3.9602119994834776e-305;
bool r83040 = r83027 <= r83039;
double r83041 = 1.0;
double r83042 = 3.0;
double r83043 = r83042 * r83035;
double r83044 = r83027 * r83027;
double r83045 = r83043 * r83031;
double r83046 = r83044 - r83045;
double r83047 = sqrt(r83046);
double r83048 = r83047 - r83027;
double r83049 = r83043 / r83048;
double r83050 = r83041 / r83049;
double r83051 = 3.4246030501515935e-29;
bool r83052 = r83027 <= r83051;
double r83053 = r83035 * r83042;
double r83054 = -r83031;
double r83055 = 2.0;
double r83056 = pow(r83027, r83055);
double r83057 = fma(r83043, r83054, r83056);
double r83058 = sqrt(r83057);
double r83059 = r83058 + r83027;
double r83060 = r83059 / r83043;
double r83061 = r83054 / r83060;
double r83062 = r83053 / r83061;
double r83063 = r83041 / r83062;
double r83064 = -0.5;
double r83065 = r83064 * r83032;
double r83066 = r83052 ? r83063 : r83065;
double r83067 = r83040 ? r83050 : r83066;
double r83068 = r83029 ? r83038 : r83067;
return r83068;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -2.063770735185841e+112Initial program 50.1
Simplified50.1
Taylor expanded around -inf 3.7
if -2.063770735185841e+112 < b < -3.9602119994834776e-305Initial program 8.4
Simplified8.4
rmApplied clear-num8.5
if -3.9602119994834776e-305 < b < 3.4246030501515935e-29Initial program 23.8
Simplified23.8
Taylor expanded around 0 23.8
Simplified23.8
rmApplied flip--23.8
Simplified18.4
Simplified18.4
rmApplied *-un-lft-identity18.4
Applied *-un-lft-identity18.4
Applied times-frac18.4
Applied associate-/l*18.4
Simplified18.4
rmApplied associate-/l*14.6
if 3.4246030501515935e-29 < b Initial program 54.8
Simplified54.8
Taylor expanded around inf 7.2
Final simplification8.5
herbie shell --seed 2019305 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))