\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.895414539362304645852221252977125330123 \cdot 10^{111}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{a \cdot c}{b}, 1.5, b \cdot -2\right)}{3 \cdot a}\\
\mathbf{elif}\;b \le 1.698277525249925633382980747692482567317 \cdot 10^{-273}:\\
\;\;\;\;\frac{\sqrt{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b} \cdot \sqrt{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}{3 \cdot a}\\
\mathbf{elif}\;b \le 9.536320284549619388810913795872221190386 \cdot 10^{133}:\\
\;\;\;\;3 \cdot \left(\frac{a}{\sqrt[3]{a} \cdot \sqrt[3]{a}} \cdot \frac{\frac{\frac{c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3}}{\sqrt[3]{a}}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{3 \cdot \left(a \cdot c\right)}{\left(-b\right) - \left(b - 1.5 \cdot \frac{a \cdot c}{b}\right)}}{3}}{a}\\
\end{array}double f(double a, double b, double c) {
double r109012 = b;
double r109013 = -r109012;
double r109014 = r109012 * r109012;
double r109015 = 3.0;
double r109016 = a;
double r109017 = r109015 * r109016;
double r109018 = c;
double r109019 = r109017 * r109018;
double r109020 = r109014 - r109019;
double r109021 = sqrt(r109020);
double r109022 = r109013 + r109021;
double r109023 = r109022 / r109017;
return r109023;
}
double f(double a, double b, double c) {
double r109024 = b;
double r109025 = -2.8954145393623046e+111;
bool r109026 = r109024 <= r109025;
double r109027 = a;
double r109028 = c;
double r109029 = r109027 * r109028;
double r109030 = r109029 / r109024;
double r109031 = 1.5;
double r109032 = -2.0;
double r109033 = r109024 * r109032;
double r109034 = fma(r109030, r109031, r109033);
double r109035 = 3.0;
double r109036 = r109035 * r109027;
double r109037 = r109034 / r109036;
double r109038 = 1.6982775252499256e-273;
bool r109039 = r109024 <= r109038;
double r109040 = r109024 * r109024;
double r109041 = r109036 * r109028;
double r109042 = r109040 - r109041;
double r109043 = sqrt(r109042);
double r109044 = r109043 - r109024;
double r109045 = sqrt(r109044);
double r109046 = r109045 * r109045;
double r109047 = r109046 / r109036;
double r109048 = 9.53632028454962e+133;
bool r109049 = r109024 <= r109048;
double r109050 = cbrt(r109027);
double r109051 = r109050 * r109050;
double r109052 = r109027 / r109051;
double r109053 = -r109024;
double r109054 = r109053 - r109043;
double r109055 = r109028 / r109054;
double r109056 = r109055 / r109035;
double r109057 = r109056 / r109050;
double r109058 = r109052 * r109057;
double r109059 = r109035 * r109058;
double r109060 = r109035 * r109029;
double r109061 = r109031 * r109030;
double r109062 = r109024 - r109061;
double r109063 = r109053 - r109062;
double r109064 = r109060 / r109063;
double r109065 = r109064 / r109035;
double r109066 = r109065 / r109027;
double r109067 = r109049 ? r109059 : r109066;
double r109068 = r109039 ? r109047 : r109067;
double r109069 = r109026 ? r109037 : r109068;
return r109069;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -2.8954145393623046e+111Initial program 48.8
Taylor expanded around -inf 10.0
Simplified10.0
if -2.8954145393623046e+111 < b < 1.6982775252499256e-273Initial program 9.1
rmApplied add-sqr-sqrt9.3
Simplified9.3
Simplified9.3
if 1.6982775252499256e-273 < b < 9.53632028454962e+133Initial program 35.3
rmApplied flip-+35.3
Simplified16.8
rmApplied associate-/r*16.8
Simplified16.8
rmApplied *-un-lft-identity16.8
Applied *-un-lft-identity16.8
Applied *-un-lft-identity16.8
Applied times-frac16.7
Applied times-frac16.8
Applied times-frac16.8
Simplified16.8
rmApplied add-cube-cbrt17.4
Applied *-un-lft-identity17.4
Applied *-un-lft-identity17.4
Applied times-frac15.1
Applied times-frac15.1
Applied times-frac12.3
Simplified12.3
if 9.53632028454962e+133 < b Initial program 62.2
rmApplied flip-+62.2
Simplified35.9
rmApplied associate-/r*35.9
Simplified35.9
Taylor expanded around inf 15.4
Final simplification11.6
herbie shell --seed 2019326 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))