\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 92.31787710257002:\\
\;\;\;\;\frac{\frac{\left(\left(a \cdot c\right) \cdot -3 + b \cdot b\right) \cdot \sqrt{\left(a \cdot c\right) \cdot -3 + b \cdot b} - b \cdot \left(b \cdot b\right)}{\left(b \cdot \sqrt{\left(a \cdot c\right) \cdot -3 + b \cdot b} + \left(\left(a \cdot c\right) \cdot -3 + b \cdot b\right)\right) + b \cdot b}}{a \cdot 3}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c, double __attribute__((unused)) d) {
double r2100870 = b;
double r2100871 = -r2100870;
double r2100872 = r2100870 * r2100870;
double r2100873 = 3.0;
double r2100874 = a;
double r2100875 = r2100873 * r2100874;
double r2100876 = c;
double r2100877 = r2100875 * r2100876;
double r2100878 = r2100872 - r2100877;
double r2100879 = sqrt(r2100878);
double r2100880 = r2100871 + r2100879;
double r2100881 = r2100880 / r2100875;
return r2100881;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r2100882 = b;
double r2100883 = 92.31787710257002;
bool r2100884 = r2100882 <= r2100883;
double r2100885 = a;
double r2100886 = c;
double r2100887 = r2100885 * r2100886;
double r2100888 = -3.0;
double r2100889 = r2100887 * r2100888;
double r2100890 = r2100882 * r2100882;
double r2100891 = r2100889 + r2100890;
double r2100892 = sqrt(r2100891);
double r2100893 = r2100891 * r2100892;
double r2100894 = r2100882 * r2100890;
double r2100895 = r2100893 - r2100894;
double r2100896 = r2100882 * r2100892;
double r2100897 = r2100896 + r2100891;
double r2100898 = r2100897 + r2100890;
double r2100899 = r2100895 / r2100898;
double r2100900 = 3.0;
double r2100901 = r2100885 * r2100900;
double r2100902 = r2100899 / r2100901;
double r2100903 = -0.5;
double r2100904 = r2100886 / r2100882;
double r2100905 = r2100903 * r2100904;
double r2100906 = r2100884 ? r2100902 : r2100905;
return r2100906;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
Results
if b < 92.31787710257002Initial program 15.6
Simplified15.6
rmApplied flip3--15.6
Simplified15.0
Simplified15.0
if 92.31787710257002 < b Initial program 34.8
Simplified34.8
Taylor expanded around inf 17.6
rmApplied div-inv17.6
Applied associate-*r*17.6
Taylor expanded around 0 17.4
Final simplification16.7
herbie shell --seed 2019135
(FPCore (a b c d)
:name "Cubic critical, narrow range"
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))