\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 -4.0323767944871679 \cdot 10^{127}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le -2.5112969209967258 \cdot 10^{-271}:\\
\;\;\;\;\frac{\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3}}{a}\\
\mathbf{elif}\;b \le 4.12298741547621415 \cdot 10^{92}:\\
\;\;\;\;\left(\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{1} \cdot c\right) \cdot \frac{\sqrt[3]{1}}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r102524 = b;
double r102525 = -r102524;
double r102526 = r102524 * r102524;
double r102527 = 3.0;
double r102528 = a;
double r102529 = r102527 * r102528;
double r102530 = c;
double r102531 = r102529 * r102530;
double r102532 = r102526 - r102531;
double r102533 = sqrt(r102532);
double r102534 = r102525 + r102533;
double r102535 = r102534 / r102529;
return r102535;
}
double f(double a, double b, double c) {
double r102536 = b;
double r102537 = -4.032376794487168e+127;
bool r102538 = r102536 <= r102537;
double r102539 = 0.5;
double r102540 = c;
double r102541 = r102540 / r102536;
double r102542 = r102539 * r102541;
double r102543 = 0.6666666666666666;
double r102544 = a;
double r102545 = r102536 / r102544;
double r102546 = r102543 * r102545;
double r102547 = r102542 - r102546;
double r102548 = -2.511296920996726e-271;
bool r102549 = r102536 <= r102548;
double r102550 = -r102536;
double r102551 = r102536 * r102536;
double r102552 = 3.0;
double r102553 = r102552 * r102544;
double r102554 = r102553 * r102540;
double r102555 = r102551 - r102554;
double r102556 = sqrt(r102555);
double r102557 = r102550 + r102556;
double r102558 = r102557 / r102552;
double r102559 = r102558 / r102544;
double r102560 = 4.122987415476214e+92;
bool r102561 = r102536 <= r102560;
double r102562 = 1.0;
double r102563 = cbrt(r102562);
double r102564 = r102563 * r102563;
double r102565 = 1.0;
double r102566 = r102564 / r102565;
double r102567 = r102566 * r102540;
double r102568 = r102550 - r102556;
double r102569 = r102563 / r102568;
double r102570 = r102567 * r102569;
double r102571 = -0.5;
double r102572 = r102571 * r102541;
double r102573 = r102561 ? r102570 : r102572;
double r102574 = r102549 ? r102559 : r102573;
double r102575 = r102538 ? r102547 : r102574;
return r102575;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -4.032376794487168e+127Initial program 53.2
Taylor expanded around -inf 3.5
if -4.032376794487168e+127 < b < -2.511296920996726e-271Initial program 8.9
rmApplied associate-/r*8.9
if -2.511296920996726e-271 < b < 4.122987415476214e+92Initial program 30.5
rmApplied flip-+30.6
Simplified16.5
rmApplied *-un-lft-identity16.5
Applied *-un-lft-identity16.5
Applied times-frac16.5
Applied associate-/l*16.6
Simplified16.0
Taylor expanded around 0 9.5
rmApplied add-cube-cbrt9.5
Applied times-frac9.4
Simplified9.3
Simplified9.3
if 4.122987415476214e+92 < b Initial program 59.4
Taylor expanded around inf 2.8
Final simplification6.9
herbie shell --seed 2020035 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))