\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 -3.71184848701856908 \cdot 10^{-6}:\\
\;\;\;\;\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 r113061 = b;
double r113062 = -r113061;
double r113063 = r113061 * r113061;
double r113064 = 3.0;
double r113065 = a;
double r113066 = r113064 * r113065;
double r113067 = c;
double r113068 = r113066 * r113067;
double r113069 = r113063 - r113068;
double r113070 = sqrt(r113069);
double r113071 = r113062 + r113070;
double r113072 = r113071 / r113066;
return r113072;
}
double f(double a, double b, double c) {
double r113073 = b;
double r113074 = -r113073;
double r113075 = r113073 * r113073;
double r113076 = 3.0;
double r113077 = a;
double r113078 = r113076 * r113077;
double r113079 = c;
double r113080 = r113078 * r113079;
double r113081 = r113075 - r113080;
double r113082 = sqrt(r113081);
double r113083 = r113074 + r113082;
double r113084 = r113083 / r113078;
double r113085 = -3.711848487018569e-06;
bool r113086 = r113084 <= r113085;
double r113087 = -r113081;
double r113088 = fma(r113073, r113073, r113087);
double r113089 = r113074 - r113082;
double r113090 = r113088 / r113089;
double r113091 = r113090 / r113078;
double r113092 = -0.5;
double r113093 = r113079 / r113073;
double r113094 = r113092 * r113093;
double r113095 = r113086 ? r113091 : r113094;
return r113095;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -3.711848487018569e-06Initial program 17.2
rmApplied flip-+17.2
Simplified16.5
if -3.711848487018569e-06 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 40.7
Taylor expanded around inf 12.8
Final simplification14.8
herbie shell --seed 2020033 +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)))