\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 -6.3513411948511732 \cdot 10^{-8}:\\
\;\;\;\;\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 r123231 = b;
double r123232 = -r123231;
double r123233 = r123231 * r123231;
double r123234 = 3.0;
double r123235 = a;
double r123236 = r123234 * r123235;
double r123237 = c;
double r123238 = r123236 * r123237;
double r123239 = r123233 - r123238;
double r123240 = sqrt(r123239);
double r123241 = r123232 + r123240;
double r123242 = r123241 / r123236;
return r123242;
}
double f(double a, double b, double c) {
double r123243 = b;
double r123244 = -r123243;
double r123245 = r123243 * r123243;
double r123246 = 3.0;
double r123247 = a;
double r123248 = r123246 * r123247;
double r123249 = c;
double r123250 = r123248 * r123249;
double r123251 = r123245 - r123250;
double r123252 = sqrt(r123251);
double r123253 = r123244 + r123252;
double r123254 = r123253 / r123248;
double r123255 = -6.351341194851173e-08;
bool r123256 = r123254 <= r123255;
double r123257 = -r123251;
double r123258 = fma(r123243, r123243, r123257);
double r123259 = r123244 - r123252;
double r123260 = r123258 / r123259;
double r123261 = r123260 / r123248;
double r123262 = -0.5;
double r123263 = r123249 / r123243;
double r123264 = r123262 * r123263;
double r123265 = r123256 ? r123261 : r123264;
return r123265;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -6.351341194851173e-08Initial program 21.9
rmApplied flip-+21.9
Simplified21.1
if -6.351341194851173e-08 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 53.9
Taylor expanded around inf 4.9
Final simplification9.9
herbie shell --seed 2020089 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))