\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 -20420724.391678445041179656982421875:\\
\;\;\;\;\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 r67862 = b;
double r67863 = -r67862;
double r67864 = r67862 * r67862;
double r67865 = 3.0;
double r67866 = a;
double r67867 = r67865 * r67866;
double r67868 = c;
double r67869 = r67867 * r67868;
double r67870 = r67864 - r67869;
double r67871 = sqrt(r67870);
double r67872 = r67863 + r67871;
double r67873 = r67872 / r67867;
return r67873;
}
double f(double a, double b, double c) {
double r67874 = b;
double r67875 = -r67874;
double r67876 = r67874 * r67874;
double r67877 = 3.0;
double r67878 = a;
double r67879 = r67877 * r67878;
double r67880 = c;
double r67881 = r67879 * r67880;
double r67882 = r67876 - r67881;
double r67883 = sqrt(r67882);
double r67884 = r67875 + r67883;
double r67885 = r67884 / r67879;
double r67886 = -20420724.391678445;
bool r67887 = r67885 <= r67886;
double r67888 = -r67882;
double r67889 = fma(r67874, r67874, r67888);
double r67890 = r67875 - r67883;
double r67891 = r67889 / r67890;
double r67892 = r67891 / r67879;
double r67893 = -0.5;
double r67894 = r67880 / r67874;
double r67895 = r67893 * r67894;
double r67896 = r67887 ? r67892 : r67895;
return r67896;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -20420724.391678445Initial program 20.9
rmApplied flip-+20.9
Simplified20.3
if -20420724.391678445 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 54.3
Taylor expanded around inf 5.0
Final simplification5.8
herbie shell --seed 2019353 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))