\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.39290314529454019 \cdot 10^{111}:\\
\;\;\;\;\frac{1.5 \cdot \frac{a \cdot c}{b} - 2 \cdot b}{3 \cdot a}\\
\mathbf{elif}\;b \le -4.9276367402926466 \cdot 10^{-151}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}} \cdot \sqrt{\left|\sqrt[3]{b \cdot b - \left(3 \cdot a\right) \cdot c}\right| \cdot \sqrt{\sqrt[3]{b \cdot b - \left(3 \cdot a\right) \cdot c}}}}{3 \cdot a}\\
\mathbf{elif}\;b \le 1.49923300867171427 \cdot 10^{153}:\\
\;\;\;\;\frac{\frac{1}{-1}}{\frac{b + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{0 + \left(3 \cdot a\right) \cdot c}{-\left(2 \cdot b - 1.5 \cdot \frac{a \cdot c}{b}\right)}}{3 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r97233 = b;
double r97234 = -r97233;
double r97235 = r97233 * r97233;
double r97236 = 3.0;
double r97237 = a;
double r97238 = r97236 * r97237;
double r97239 = c;
double r97240 = r97238 * r97239;
double r97241 = r97235 - r97240;
double r97242 = sqrt(r97241);
double r97243 = r97234 + r97242;
double r97244 = r97243 / r97238;
return r97244;
}
double f(double a, double b, double c) {
double r97245 = b;
double r97246 = -2.3929031452945402e+111;
bool r97247 = r97245 <= r97246;
double r97248 = 1.5;
double r97249 = a;
double r97250 = c;
double r97251 = r97249 * r97250;
double r97252 = r97251 / r97245;
double r97253 = r97248 * r97252;
double r97254 = 2.0;
double r97255 = r97254 * r97245;
double r97256 = r97253 - r97255;
double r97257 = 3.0;
double r97258 = r97257 * r97249;
double r97259 = r97256 / r97258;
double r97260 = -4.9276367402926466e-151;
bool r97261 = r97245 <= r97260;
double r97262 = -r97245;
double r97263 = r97245 * r97245;
double r97264 = r97258 * r97250;
double r97265 = r97263 - r97264;
double r97266 = sqrt(r97265);
double r97267 = sqrt(r97266);
double r97268 = cbrt(r97265);
double r97269 = fabs(r97268);
double r97270 = sqrt(r97268);
double r97271 = r97269 * r97270;
double r97272 = sqrt(r97271);
double r97273 = r97267 * r97272;
double r97274 = r97262 + r97273;
double r97275 = r97274 / r97258;
double r97276 = 1.4992330086717143e+153;
bool r97277 = r97245 <= r97276;
double r97278 = 1.0;
double r97279 = -r97278;
double r97280 = r97278 / r97279;
double r97281 = r97245 + r97266;
double r97282 = r97281 / r97250;
double r97283 = r97280 / r97282;
double r97284 = 0.0;
double r97285 = r97284 + r97264;
double r97286 = r97255 - r97253;
double r97287 = -r97286;
double r97288 = r97285 / r97287;
double r97289 = r97288 / r97258;
double r97290 = r97277 ? r97283 : r97289;
double r97291 = r97261 ? r97275 : r97290;
double r97292 = r97247 ? r97259 : r97291;
return r97292;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -2.3929031452945402e+111Initial program 49.3
Taylor expanded around -inf 10.4
if -2.3929031452945402e+111 < b < -4.9276367402926466e-151Initial program 6.6
rmApplied add-sqr-sqrt6.6
Applied sqrt-prod6.8
rmApplied add-cube-cbrt6.8
Applied sqrt-prod6.8
Simplified6.8
if -4.9276367402926466e-151 < b < 1.4992330086717143e+153Initial program 30.4
rmApplied add-sqr-sqrt30.4
Applied sqrt-prod32.0
rmApplied flip-+32.4
Simplified15.7
Simplified15.6
rmApplied *-un-lft-identity15.6
Applied distribute-lft-neg-in15.6
Applied *-un-lft-identity15.6
Applied times-frac15.6
Simplified14.1
rmApplied associate-/l*14.1
Simplified10.0
if 1.4992330086717143e+153 < b Initial program 63.9
rmApplied add-sqr-sqrt63.9
Applied sqrt-prod63.9
rmApplied flip-+63.9
Simplified37.5
Simplified37.5
Taylor expanded around inf 15.3
Final simplification10.3
herbie shell --seed 2020021 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))