\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a} \le -6.87415629567366912 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(b, b, -\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right)\right)}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r108559 = b;
double r108560 = -r108559;
double r108561 = r108559 * r108559;
double r108562 = 3.0;
double r108563 = a;
double r108564 = r108562 * r108563;
double r108565 = c;
double r108566 = r108564 * r108565;
double r108567 = r108561 - r108566;
double r108568 = sqrt(r108567);
double r108569 = r108560 + r108568;
double r108570 = r108569 / r108564;
return r108570;
}
double f(double a, double b, double c) {
double r108571 = b;
double r108572 = -r108571;
double r108573 = r108571 * r108571;
double r108574 = 3.0;
double r108575 = a;
double r108576 = r108574 * r108575;
double r108577 = c;
double r108578 = r108576 * r108577;
double r108579 = r108573 - r108578;
double r108580 = sqrt(r108579);
double r108581 = r108572 + r108580;
double r108582 = r108581 / r108576;
double r108583 = -0.0006874156295673669;
bool r108584 = r108582 <= r108583;
double r108585 = -r108579;
double r108586 = fma(r108571, r108571, r108585);
double r108587 = r108572 - r108580;
double r108588 = r108586 / r108587;
double r108589 = r108588 / r108576;
double r108590 = -0.5;
double r108591 = r108577 / r108571;
double r108592 = r108590 * r108591;
double r108593 = r108584 ? r108589 : r108592;
return r108593;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -0.0006874156295673669Initial program 20.2
rmApplied flip-+20.3
Simplified19.5
if -0.0006874156295673669 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 50.0
Taylor expanded around inf 7.5
Final simplification10.1
herbie shell --seed 2020024 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))