\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 -0.00603955616896163349:\\
\;\;\;\;\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 r117745 = b;
double r117746 = -r117745;
double r117747 = r117745 * r117745;
double r117748 = 3.0;
double r117749 = a;
double r117750 = r117748 * r117749;
double r117751 = c;
double r117752 = r117750 * r117751;
double r117753 = r117747 - r117752;
double r117754 = sqrt(r117753);
double r117755 = r117746 + r117754;
double r117756 = r117755 / r117750;
return r117756;
}
double f(double a, double b, double c) {
double r117757 = b;
double r117758 = -r117757;
double r117759 = r117757 * r117757;
double r117760 = 3.0;
double r117761 = a;
double r117762 = r117760 * r117761;
double r117763 = c;
double r117764 = r117762 * r117763;
double r117765 = r117759 - r117764;
double r117766 = sqrt(r117765);
double r117767 = r117758 + r117766;
double r117768 = r117767 / r117762;
double r117769 = -0.0060395561689616335;
bool r117770 = r117768 <= r117769;
double r117771 = -r117765;
double r117772 = fma(r117757, r117757, r117771);
double r117773 = r117758 - r117766;
double r117774 = r117772 / r117773;
double r117775 = r117774 / r117762;
double r117776 = -0.5;
double r117777 = r117763 / r117757;
double r117778 = r117776 * r117777;
double r117779 = r117770 ? r117775 : r117778;
return r117779;
}



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.0060395561689616335Initial program 19.6
rmApplied flip-+19.7
Simplified18.9
if -0.0060395561689616335 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 49.2
Taylor expanded around inf 8.1
Final simplification10.1
herbie shell --seed 2020033 +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)))