\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 -2.02309731014316798 \cdot 10^{-5}:\\
\;\;\;\;\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 r66706 = b;
double r66707 = -r66706;
double r66708 = r66706 * r66706;
double r66709 = 3.0;
double r66710 = a;
double r66711 = r66709 * r66710;
double r66712 = c;
double r66713 = r66711 * r66712;
double r66714 = r66708 - r66713;
double r66715 = sqrt(r66714);
double r66716 = r66707 + r66715;
double r66717 = r66716 / r66711;
return r66717;
}
double f(double a, double b, double c) {
double r66718 = b;
double r66719 = -r66718;
double r66720 = r66718 * r66718;
double r66721 = 3.0;
double r66722 = a;
double r66723 = r66721 * r66722;
double r66724 = c;
double r66725 = r66723 * r66724;
double r66726 = r66720 - r66725;
double r66727 = sqrt(r66726);
double r66728 = r66719 + r66727;
double r66729 = r66728 / r66723;
double r66730 = -2.023097310143168e-05;
bool r66731 = r66729 <= r66730;
double r66732 = -r66726;
double r66733 = fma(r66718, r66718, r66732);
double r66734 = r66719 - r66727;
double r66735 = r66733 / r66734;
double r66736 = r66735 / r66723;
double r66737 = -0.5;
double r66738 = r66724 / r66718;
double r66739 = r66737 * r66738;
double r66740 = r66731 ? r66736 : r66739;
return r66740;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -2.023097310143168e-05Initial program 16.6
rmApplied flip-+16.6
Simplified15.8
if -2.023097310143168e-05 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 39.1
Taylor expanded around inf 14.0
Final simplification14.9
herbie shell --seed 2020062 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, narrow range"
:precision binary64
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))