\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -2.1144981103869975 \cdot 10^{+131}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\mathbf{elif}\;b \le 4.5810084990875205 \cdot 10^{-68}:\\
\;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-4 \cdot a\right)\right)} - b}}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r4776715 = b;
double r4776716 = -r4776715;
double r4776717 = r4776715 * r4776715;
double r4776718 = 4.0;
double r4776719 = a;
double r4776720 = r4776718 * r4776719;
double r4776721 = c;
double r4776722 = r4776720 * r4776721;
double r4776723 = r4776717 - r4776722;
double r4776724 = sqrt(r4776723);
double r4776725 = r4776716 + r4776724;
double r4776726 = 2.0;
double r4776727 = r4776726 * r4776719;
double r4776728 = r4776725 / r4776727;
return r4776728;
}
double f(double a, double b, double c) {
double r4776729 = b;
double r4776730 = -2.1144981103869975e+131;
bool r4776731 = r4776729 <= r4776730;
double r4776732 = c;
double r4776733 = r4776732 / r4776729;
double r4776734 = a;
double r4776735 = r4776729 / r4776734;
double r4776736 = r4776733 - r4776735;
double r4776737 = 2.0;
double r4776738 = r4776736 * r4776737;
double r4776739 = r4776738 / r4776737;
double r4776740 = 4.5810084990875205e-68;
bool r4776741 = r4776729 <= r4776740;
double r4776742 = 1.0;
double r4776743 = -4.0;
double r4776744 = r4776743 * r4776734;
double r4776745 = r4776732 * r4776744;
double r4776746 = fma(r4776729, r4776729, r4776745);
double r4776747 = sqrt(r4776746);
double r4776748 = r4776747 - r4776729;
double r4776749 = r4776734 / r4776748;
double r4776750 = r4776742 / r4776749;
double r4776751 = r4776750 / r4776737;
double r4776752 = -2.0;
double r4776753 = r4776752 * r4776733;
double r4776754 = r4776753 / r4776737;
double r4776755 = r4776741 ? r4776751 : r4776754;
double r4776756 = r4776731 ? r4776739 : r4776755;
return r4776756;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.6 |
|---|---|
| Target | 21.0 |
| Herbie | 10.4 |
if b < -2.1144981103869975e+131Initial program 53.8
Simplified53.8
Taylor expanded around -inf 2.6
Simplified2.6
if -2.1144981103869975e+131 < b < 4.5810084990875205e-68Initial program 13.3
Simplified13.3
rmApplied clear-num13.5
if 4.5810084990875205e-68 < b Initial program 52.0
Simplified52.0
Taylor expanded around inf 9.3
Final simplification10.4
herbie shell --seed 2019163 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))