\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 -7.2472444250675514 \cdot 10^{-4}:\\
\;\;\;\;\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 r115847 = b;
double r115848 = -r115847;
double r115849 = r115847 * r115847;
double r115850 = 3.0;
double r115851 = a;
double r115852 = r115850 * r115851;
double r115853 = c;
double r115854 = r115852 * r115853;
double r115855 = r115849 - r115854;
double r115856 = sqrt(r115855);
double r115857 = r115848 + r115856;
double r115858 = r115857 / r115852;
return r115858;
}
double f(double a, double b, double c) {
double r115859 = b;
double r115860 = -r115859;
double r115861 = r115859 * r115859;
double r115862 = 3.0;
double r115863 = a;
double r115864 = r115862 * r115863;
double r115865 = c;
double r115866 = r115864 * r115865;
double r115867 = r115861 - r115866;
double r115868 = sqrt(r115867);
double r115869 = r115860 + r115868;
double r115870 = r115869 / r115864;
double r115871 = -0.0007247244425067551;
bool r115872 = r115870 <= r115871;
double r115873 = -r115867;
double r115874 = fma(r115859, r115859, r115873);
double r115875 = r115860 - r115868;
double r115876 = r115874 / r115875;
double r115877 = r115876 / r115864;
double r115878 = -0.5;
double r115879 = r115865 / r115859;
double r115880 = r115878 * r115879;
double r115881 = r115872 ? r115877 : r115880;
return r115881;
}



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.0007247244425067551Initial program 23.2
rmApplied flip-+23.2
Simplified22.4
if -0.0007247244425067551 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 56.6
Taylor expanded around inf 3.4
Final simplification5.6
herbie shell --seed 2020035 +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)))