\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.327347707720873 \cdot 10^{154}:\\
\;\;\;\;\frac{1.5 \cdot \frac{a \cdot c}{b} - 2 \cdot b}{3 \cdot a}\\
\mathbf{elif}\;b \le -8.2053558757086961 \cdot 10^{-149}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(\left(3 \cdot a\right) \cdot \left(\sqrt[3]{c} \cdot \sqrt[3]{c}\right)\right) \cdot \sqrt[3]{c}}}{3 \cdot a}\\
\mathbf{elif}\;b \le 1.8586636444574517 \cdot 10^{123}:\\
\;\;\;\;\frac{\frac{\left(3 \cdot a\right) \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{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 r89450 = b;
double r89451 = -r89450;
double r89452 = r89450 * r89450;
double r89453 = 3.0;
double r89454 = a;
double r89455 = r89453 * r89454;
double r89456 = c;
double r89457 = r89455 * r89456;
double r89458 = r89452 - r89457;
double r89459 = sqrt(r89458);
double r89460 = r89451 + r89459;
double r89461 = r89460 / r89455;
return r89461;
}
double f(double a, double b, double c) {
double r89462 = b;
double r89463 = -1.327347707720873e+154;
bool r89464 = r89462 <= r89463;
double r89465 = 1.5;
double r89466 = a;
double r89467 = c;
double r89468 = r89466 * r89467;
double r89469 = r89468 / r89462;
double r89470 = r89465 * r89469;
double r89471 = 2.0;
double r89472 = r89471 * r89462;
double r89473 = r89470 - r89472;
double r89474 = 3.0;
double r89475 = r89474 * r89466;
double r89476 = r89473 / r89475;
double r89477 = -8.205355875708696e-149;
bool r89478 = r89462 <= r89477;
double r89479 = -r89462;
double r89480 = r89462 * r89462;
double r89481 = cbrt(r89467);
double r89482 = r89481 * r89481;
double r89483 = r89475 * r89482;
double r89484 = r89483 * r89481;
double r89485 = r89480 - r89484;
double r89486 = sqrt(r89485);
double r89487 = r89479 + r89486;
double r89488 = r89487 / r89475;
double r89489 = 1.8586636444574517e+123;
bool r89490 = r89462 <= r89489;
double r89491 = r89475 * r89467;
double r89492 = r89480 - r89491;
double r89493 = sqrt(r89492);
double r89494 = r89479 - r89493;
double r89495 = r89491 / r89494;
double r89496 = r89495 / r89475;
double r89497 = -1.5;
double r89498 = r89497 * r89469;
double r89499 = r89498 / r89475;
double r89500 = r89490 ? r89496 : r89499;
double r89501 = r89478 ? r89488 : r89500;
double r89502 = r89464 ? r89476 : r89501;
return r89502;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -1.327347707720873e+154Initial program 64.0
rmApplied add-cube-cbrt64.0
Applied associate-*r*64.0
rmApplied add-cube-cbrt64.0
Taylor expanded around -inf 11.9
if -1.327347707720873e+154 < b < -8.205355875708696e-149Initial program 5.7
rmApplied add-cube-cbrt5.9
Applied associate-*r*5.9
if -8.205355875708696e-149 < b < 1.8586636444574517e+123Initial program 28.9
rmApplied add-cube-cbrt29.2
Applied associate-*r*29.2
rmApplied flip-+29.5
Simplified16.6
Simplified16.3
if 1.8586636444574517e+123 < b Initial program 60.8
Taylor expanded around inf 13.7
Final simplification12.8
herbie shell --seed 2020042
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))