\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 -1.43924972189802074 \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 r89918 = b;
double r89919 = -r89918;
double r89920 = r89918 * r89918;
double r89921 = 3.0;
double r89922 = a;
double r89923 = r89921 * r89922;
double r89924 = c;
double r89925 = r89923 * r89924;
double r89926 = r89920 - r89925;
double r89927 = sqrt(r89926);
double r89928 = r89919 + r89927;
double r89929 = r89928 / r89923;
return r89929;
}
double f(double a, double b, double c) {
double r89930 = b;
double r89931 = -r89930;
double r89932 = r89930 * r89930;
double r89933 = 3.0;
double r89934 = a;
double r89935 = r89933 * r89934;
double r89936 = c;
double r89937 = r89935 * r89936;
double r89938 = r89932 - r89937;
double r89939 = sqrt(r89938);
double r89940 = r89931 + r89939;
double r89941 = r89940 / r89935;
double r89942 = -1.4392497218980207e-05;
bool r89943 = r89941 <= r89942;
double r89944 = -r89938;
double r89945 = fma(r89930, r89930, r89944);
double r89946 = r89931 - r89939;
double r89947 = r89945 / r89946;
double r89948 = r89947 / r89935;
double r89949 = -0.5;
double r89950 = r89936 / r89930;
double r89951 = r89949 * r89950;
double r89952 = r89943 ? r89948 : r89951;
return r89952;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -1.4392497218980207e-05Initial program 21.3
rmApplied flip-+21.3
Simplified20.5
if -1.4392497218980207e-05 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 51.4
Taylor expanded around inf 6.6
Final simplification10.2
herbie shell --seed 2020039 +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)))