\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.9379200009701226 \cdot 10^{-7}:\\
\;\;\;\;\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 r107954 = b;
double r107955 = -r107954;
double r107956 = r107954 * r107954;
double r107957 = 3.0;
double r107958 = a;
double r107959 = r107957 * r107958;
double r107960 = c;
double r107961 = r107959 * r107960;
double r107962 = r107956 - r107961;
double r107963 = sqrt(r107962);
double r107964 = r107955 + r107963;
double r107965 = r107964 / r107959;
return r107965;
}
double f(double a, double b, double c) {
double r107966 = b;
double r107967 = -r107966;
double r107968 = r107966 * r107966;
double r107969 = 3.0;
double r107970 = a;
double r107971 = r107969 * r107970;
double r107972 = c;
double r107973 = r107971 * r107972;
double r107974 = r107968 - r107973;
double r107975 = sqrt(r107974);
double r107976 = r107967 + r107975;
double r107977 = r107976 / r107971;
double r107978 = -1.9379200009701226e-07;
bool r107979 = r107977 <= r107978;
double r107980 = -r107974;
double r107981 = fma(r107966, r107966, r107980);
double r107982 = r107967 - r107975;
double r107983 = r107981 / r107982;
double r107984 = r107983 / r107971;
double r107985 = -0.5;
double r107986 = r107972 / r107966;
double r107987 = r107985 * r107986;
double r107988 = r107979 ? r107984 : r107987;
return r107988;
}



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.9379200009701226e-07Initial program 18.4
rmApplied flip-+18.4
Simplified17.6
if -1.9379200009701226e-07 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 45.3
Taylor expanded around inf 9.5
Final simplification14.5
herbie shell --seed 2020036 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, narrow range"
:precision binary64
: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)))