\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.6144598601256074 \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 r105614 = b;
double r105615 = -r105614;
double r105616 = r105614 * r105614;
double r105617 = 3.0;
double r105618 = a;
double r105619 = r105617 * r105618;
double r105620 = c;
double r105621 = r105619 * r105620;
double r105622 = r105616 - r105621;
double r105623 = sqrt(r105622);
double r105624 = r105615 + r105623;
double r105625 = r105624 / r105619;
return r105625;
}
double f(double a, double b, double c) {
double r105626 = b;
double r105627 = -r105626;
double r105628 = r105626 * r105626;
double r105629 = 3.0;
double r105630 = a;
double r105631 = r105629 * r105630;
double r105632 = c;
double r105633 = r105631 * r105632;
double r105634 = r105628 - r105633;
double r105635 = sqrt(r105634);
double r105636 = r105627 + r105635;
double r105637 = r105636 / r105631;
double r105638 = -6.614459860125607e-07;
bool r105639 = r105637 <= r105638;
double r105640 = -r105634;
double r105641 = fma(r105626, r105626, r105640);
double r105642 = r105627 - r105635;
double r105643 = r105641 / r105642;
double r105644 = r105643 / r105631;
double r105645 = -0.5;
double r105646 = r105632 / r105626;
double r105647 = r105645 * r105646;
double r105648 = r105639 ? r105644 : r105647;
return r105648;
}



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.614459860125607e-07Initial program 21.4
rmApplied flip-+21.4
Simplified20.6
if -6.614459860125607e-07 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 52.9
Taylor expanded around inf 5.7
Final simplification10.0
herbie shell --seed 2020062 +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)))