\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 0.003147622297084620886231665082277686451562:\\
\;\;\;\;\frac{\frac{b \cdot b - \mathsf{fma}\left(3 \cdot a, c, b \cdot b\right)}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + b}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r49677 = b;
double r49678 = -r49677;
double r49679 = r49677 * r49677;
double r49680 = 3.0;
double r49681 = a;
double r49682 = r49680 * r49681;
double r49683 = c;
double r49684 = r49682 * r49683;
double r49685 = r49679 - r49684;
double r49686 = sqrt(r49685);
double r49687 = r49678 + r49686;
double r49688 = r49687 / r49682;
return r49688;
}
double f(double a, double b, double c) {
double r49689 = b;
double r49690 = 0.003147622297084621;
bool r49691 = r49689 <= r49690;
double r49692 = r49689 * r49689;
double r49693 = 3.0;
double r49694 = a;
double r49695 = r49693 * r49694;
double r49696 = c;
double r49697 = fma(r49695, r49696, r49692);
double r49698 = r49692 - r49697;
double r49699 = r49695 * r49696;
double r49700 = r49692 - r49699;
double r49701 = sqrt(r49700);
double r49702 = r49701 + r49689;
double r49703 = r49698 / r49702;
double r49704 = r49703 / r49695;
double r49705 = -0.5;
double r49706 = r49696 / r49689;
double r49707 = r49705 * r49706;
double r49708 = r49691 ? r49704 : r49707;
return r49708;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 0.003147622297084621Initial program 21.2
Simplified21.2
rmApplied flip--21.2
Simplified20.2
if 0.003147622297084621 < b Initial program 46.2
Simplified46.2
Taylor expanded around inf 10.2
Final simplification11.2
herbie shell --seed 2019305 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e15) (< 1.11022e-16 b 9.0072e15) (< 1.11022e-16 c 9.0072e15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))