\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.205465986680909011843083811411405971894 \cdot 10^{135}:\\
\;\;\;\;\frac{\left(-b\right) + \left(1.5 \cdot \frac{a \cdot c}{b} - b\right)}{3 \cdot a}\\
\mathbf{elif}\;b \le -2.06033220120780029089998808218980405169 \cdot 10^{-258}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}{3}}{a}\\
\mathbf{elif}\;b \le 9.437505947861471790660874606217630038564 \cdot 10^{134}:\\
\;\;\;\;\frac{\frac{\frac{-\left(3 \cdot a\right) \cdot c}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + b}}{3}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{-1.5 \cdot \frac{a \cdot c}{b}}{3}}{a}\\
\end{array}double f(double a, double b, double c) {
double r61475 = b;
double r61476 = -r61475;
double r61477 = r61475 * r61475;
double r61478 = 3.0;
double r61479 = a;
double r61480 = r61478 * r61479;
double r61481 = c;
double r61482 = r61480 * r61481;
double r61483 = r61477 - r61482;
double r61484 = sqrt(r61483);
double r61485 = r61476 + r61484;
double r61486 = r61485 / r61480;
return r61486;
}
double f(double a, double b, double c) {
double r61487 = b;
double r61488 = -2.205465986680909e+135;
bool r61489 = r61487 <= r61488;
double r61490 = -r61487;
double r61491 = 1.5;
double r61492 = a;
double r61493 = c;
double r61494 = r61492 * r61493;
double r61495 = r61494 / r61487;
double r61496 = r61491 * r61495;
double r61497 = r61496 - r61487;
double r61498 = r61490 + r61497;
double r61499 = 3.0;
double r61500 = r61499 * r61492;
double r61501 = r61498 / r61500;
double r61502 = -2.0603322012078003e-258;
bool r61503 = r61487 <= r61502;
double r61504 = r61487 * r61487;
double r61505 = r61500 * r61493;
double r61506 = r61504 - r61505;
double r61507 = sqrt(r61506);
double r61508 = r61507 - r61487;
double r61509 = r61508 / r61499;
double r61510 = r61509 / r61492;
double r61511 = 9.437505947861472e+134;
bool r61512 = r61487 <= r61511;
double r61513 = -r61505;
double r61514 = r61507 + r61487;
double r61515 = r61513 / r61514;
double r61516 = r61515 / r61499;
double r61517 = r61516 / r61492;
double r61518 = -1.5;
double r61519 = r61518 * r61495;
double r61520 = r61519 / r61499;
double r61521 = r61520 / r61492;
double r61522 = r61512 ? r61517 : r61521;
double r61523 = r61503 ? r61510 : r61522;
double r61524 = r61489 ? r61501 : r61523;
return r61524;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -2.205465986680909e+135Initial program 56.7
Taylor expanded around -inf 11.3
if -2.205465986680909e+135 < b < -2.0603322012078003e-258Initial program 8.0
Simplified8.0
if -2.0603322012078003e-258 < b < 9.437505947861472e+134Initial program 32.3
Simplified32.3
rmApplied flip--32.3
Simplified16.1
if 9.437505947861472e+134 < b Initial program 62.0
Simplified62.0
Taylor expanded around inf 15.2
Final simplification12.9
herbie shell --seed 2019303
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))