\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.457738542065716919858398723449020930628 \cdot 10^{153}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -2.695863739873928877277501764874065503226 \cdot 10^{-295}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)} - b}\\
\mathbf{elif}\;b \le 1.191203142513164639216663918436976252985 \cdot 10^{117}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r134702 = b;
double r134703 = -r134702;
double r134704 = r134702 * r134702;
double r134705 = 4.0;
double r134706 = a;
double r134707 = c;
double r134708 = r134706 * r134707;
double r134709 = r134705 * r134708;
double r134710 = r134704 - r134709;
double r134711 = sqrt(r134710);
double r134712 = r134703 - r134711;
double r134713 = 2.0;
double r134714 = r134713 * r134706;
double r134715 = r134712 / r134714;
return r134715;
}
double f(double a, double b, double c) {
double r134716 = b;
double r134717 = -1.457738542065717e+153;
bool r134718 = r134716 <= r134717;
double r134719 = -1.0;
double r134720 = c;
double r134721 = r134720 / r134716;
double r134722 = r134719 * r134721;
double r134723 = -2.695863739873929e-295;
bool r134724 = r134716 <= r134723;
double r134725 = 2.0;
double r134726 = r134725 * r134720;
double r134727 = 4.0;
double r134728 = a;
double r134729 = r134728 * r134720;
double r134730 = r134727 * r134729;
double r134731 = -r134730;
double r134732 = fma(r134716, r134716, r134731);
double r134733 = sqrt(r134732);
double r134734 = r134733 - r134716;
double r134735 = r134726 / r134734;
double r134736 = 1.1912031425131646e+117;
bool r134737 = r134716 <= r134736;
double r134738 = 1.0;
double r134739 = r134725 * r134728;
double r134740 = -r134716;
double r134741 = r134716 * r134716;
double r134742 = r134741 - r134730;
double r134743 = sqrt(r134742);
double r134744 = r134740 - r134743;
double r134745 = r134739 / r134744;
double r134746 = r134738 / r134745;
double r134747 = r134716 / r134728;
double r134748 = r134719 * r134747;
double r134749 = r134737 ? r134746 : r134748;
double r134750 = r134724 ? r134735 : r134749;
double r134751 = r134718 ? r134722 : r134750;
return r134751;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.4 |
|---|---|
| Target | 21.2 |
| Herbie | 7.0 |
if b < -1.457738542065717e+153Initial program 63.9
Taylor expanded around -inf 1.3
if -1.457738542065717e+153 < b < -2.695863739873929e-295Initial program 35.5
rmApplied flip--35.5
Simplified16.5
Simplified16.5
rmApplied div-inv16.6
rmApplied associate-*l/15.1
Simplified15.0
Taylor expanded around 0 8.3
if -2.695863739873929e-295 < b < 1.1912031425131646e+117Initial program 9.8
rmApplied clear-num9.9
if 1.1912031425131646e+117 < b Initial program 50.7
rmApplied flip--63.7
Simplified62.7
Simplified62.7
Taylor expanded around 0 4.0
Final simplification7.0
herbie shell --seed 2019351 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))