\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 183.1843483503574816495529375970363616943:\\
\;\;\;\;\frac{\frac{\frac{\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right) - b \cdot b}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + b}}{3}}{a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r38562 = b;
double r38563 = -r38562;
double r38564 = r38562 * r38562;
double r38565 = 3.0;
double r38566 = a;
double r38567 = r38565 * r38566;
double r38568 = c;
double r38569 = r38567 * r38568;
double r38570 = r38564 - r38569;
double r38571 = sqrt(r38570);
double r38572 = r38563 + r38571;
double r38573 = r38572 / r38567;
return r38573;
}
double f(double a, double b, double c) {
double r38574 = b;
double r38575 = 183.18434835035748;
bool r38576 = r38574 <= r38575;
double r38577 = r38574 * r38574;
double r38578 = 3.0;
double r38579 = a;
double r38580 = r38578 * r38579;
double r38581 = c;
double r38582 = r38580 * r38581;
double r38583 = r38577 - r38582;
double r38584 = r38583 - r38577;
double r38585 = sqrt(r38583);
double r38586 = r38585 + r38574;
double r38587 = r38584 / r38586;
double r38588 = r38587 / r38578;
double r38589 = r38588 / r38579;
double r38590 = -0.5;
double r38591 = r38581 / r38574;
double r38592 = r38590 * r38591;
double r38593 = r38576 ? r38589 : r38592;
return r38593;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 183.18434835035748Initial program 15.9
Simplified15.9
rmApplied flip--15.9
Simplified14.9
if 183.18434835035748 < b Initial program 35.0
Simplified35.0
Taylor expanded around inf 17.2
Final simplification16.5
herbie shell --seed 2019305
(FPCore (a b c)
:name "Cubic critical, narrow range"
:precision binary64
:pre (and (< 1.05367121277235087e-8 a 94906265.6242515594) (< 1.05367121277235087e-8 b 94906265.6242515594) (< 1.05367121277235087e-8 c 94906265.6242515594))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))