\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.7936624356974993 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, -c \cdot \left(3 \cdot a\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 r82604 = b;
double r82605 = -r82604;
double r82606 = r82604 * r82604;
double r82607 = 3.0;
double r82608 = a;
double r82609 = r82607 * r82608;
double r82610 = c;
double r82611 = r82609 * r82610;
double r82612 = r82606 - r82611;
double r82613 = sqrt(r82612);
double r82614 = r82605 + r82613;
double r82615 = r82614 / r82609;
return r82615;
}
double f(double a, double b, double c) {
double r82616 = b;
double r82617 = 0.00017936624356974993;
bool r82618 = r82616 <= r82617;
double r82619 = r82616 * r82616;
double r82620 = c;
double r82621 = 3.0;
double r82622 = a;
double r82623 = r82621 * r82622;
double r82624 = r82620 * r82623;
double r82625 = -r82624;
double r82626 = fma(r82616, r82616, r82625);
double r82627 = r82619 - r82626;
double r82628 = -r82616;
double r82629 = r82623 * r82620;
double r82630 = r82619 - r82629;
double r82631 = sqrt(r82630);
double r82632 = r82628 - r82631;
double r82633 = r82627 / r82632;
double r82634 = r82633 / r82623;
double r82635 = -0.5;
double r82636 = r82620 / r82616;
double r82637 = r82635 * r82636;
double r82638 = r82618 ? r82634 : r82637;
return r82638;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 0.00017936624356974993Initial program 18.4
rmApplied flip-+18.4
Simplified17.7
if 0.00017936624356974993 < b Initial program 45.7
Taylor expanded around inf 10.6
Final simplification11.1
herbie shell --seed 2020047 +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)))