summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gmplib.org>2010-01-07 19:09:17 +0100
committerTorbjorn Granlund <tege@gmplib.org>2010-01-07 19:09:17 +0100
commitf23a198e66036d5ee726e82e1bf2521dfcb71640 (patch)
treeae22020602cd253ca12339f58875b07c2d6c7ba1
parent28f7cc5e9e14374caed3390e5ed4b50c6e86073c (diff)
downloadgmp-f23a198e66036d5ee726e82e1bf2521dfcb71640.tar.gz
Account for divisor truncation error as well as mpn_mu_divappr_q's error.
-rw-r--r--ChangeLog7
-rw-r--r--mpn/generic/mu_div_q.c4
2 files changed, 8 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index d97b16136..0d2d200e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,9 @@
* Version 5.0.0 released.
+ * mpn/generic/mu_div_q.c: Account for divisor truncation error as well
+ as mpn_mu_divappr_q's error.
+
* mpn/generic/mu_div_q.c: Handle mpn_preinv_mu_divappr_q returning a
high limb.
@@ -18,8 +21,8 @@
(mpn_preinv_mu_divappr_q, mpn_mu_divappr_q): Declare dividend constant.
* gmp-impl.h: Likewise.
- * perfpow.c (mpn_perfect_power_p): Call mpn_divexact instead of mpn_bdiv_q (with
- too little scratch space!).
+ * perfpow.c (mpn_perfect_power_p): Call mpn_divexact instead of
+ mpn_bdiv_q (with too little scratch space!).
From Niels Möller:
* tests/mpn/t-div.c (check_one): Get rid of the poorly managed variable
diff --git a/mpn/generic/mu_div_q.c b/mpn/generic/mu_div_q.c
index f0466a212..d4c3cef54 100644
--- a/mpn/generic/mu_div_q.c
+++ b/mpn/generic/mu_div_q.c
@@ -166,7 +166,9 @@ mpn_mu_div_q (mp_ptr qp,
qh = mpn_mu_divappr_q (tp, np + nn - (2 * qn + 2), 2 * qn + 2,
dp + dn - (qn + 1), qn + 1, scratch);
- if (tp[0] > 4)
+ /* The max error of mpn_mu_divappr_q is +4, but we get an additional
+ error from the divisor truncation. */
+ if (tp[0] > 6)
{
MPN_COPY (qp, tp + 1, qn);
}