\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 -18.0160473107397401 \lor \neg \left(\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a} \le -0.019935748181870647 \lor \neg \left(\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a} \le -1.58617571080010815 \cdot 10^{-7}\right)\right):\\
\;\;\;\;\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 r104688 = b;
double r104689 = -r104688;
double r104690 = r104688 * r104688;
double r104691 = 3.0;
double r104692 = a;
double r104693 = r104691 * r104692;
double r104694 = c;
double r104695 = r104693 * r104694;
double r104696 = r104690 - r104695;
double r104697 = sqrt(r104696);
double r104698 = r104689 + r104697;
double r104699 = r104698 / r104693;
return r104699;
}
double f(double a, double b, double c) {
double r104700 = b;
double r104701 = -r104700;
double r104702 = r104700 * r104700;
double r104703 = 3.0;
double r104704 = a;
double r104705 = r104703 * r104704;
double r104706 = c;
double r104707 = r104705 * r104706;
double r104708 = r104702 - r104707;
double r104709 = sqrt(r104708);
double r104710 = r104701 + r104709;
double r104711 = r104710 / r104705;
double r104712 = -18.01604731073974;
bool r104713 = r104711 <= r104712;
double r104714 = -0.019935748181870647;
bool r104715 = r104711 <= r104714;
double r104716 = -1.5861757108001082e-07;
bool r104717 = r104711 <= r104716;
double r104718 = !r104717;
bool r104719 = r104715 || r104718;
double r104720 = !r104719;
bool r104721 = r104713 || r104720;
double r104722 = -r104708;
double r104723 = fma(r104700, r104700, r104722);
double r104724 = r104701 - r104709;
double r104725 = r104723 / r104724;
double r104726 = r104725 / r104705;
double r104727 = -0.5;
double r104728 = r104706 / r104700;
double r104729 = r104727 * r104728;
double r104730 = r104721 ? r104726 : r104729;
return r104730;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -18.01604731073974 or -0.019935748181870647 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -1.5861757108001082e-07Initial program 21.9
rmApplied flip-+21.9
Simplified21.1
if -18.01604731073974 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -0.019935748181870647 or -1.5861757108001082e-07 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 51.1
Taylor expanded around inf 6.8
Final simplification10.1
herbie shell --seed 2020065 +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)))