summaryrefslogtreecommitdiff
path: root/mpz
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2021-12-30 18:08:00 +0100
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2021-12-30 18:08:00 +0100
commit80f8687c11422ed3cbf82f5202a40f8cf9b80940 (patch)
tree8d426743c4c024489199781ec8aa715528eb6420 /mpz
parent650368f11361f45af429cac9690c9d85885d765c (diff)
downloadgmp-80f8687c11422ed3cbf82f5202a40f8cf9b80940.tar.gz
mpz/tdiv_{qr,r}.c: Special code for divisor with low zero limbs.
Diffstat (limited to 'mpz')
-rw-r--r--mpz/tdiv_qr.c13
-rw-r--r--mpz/tdiv_r.c13
2 files changed, 18 insertions, 8 deletions
diff --git a/mpz/tdiv_qr.c b/mpz/tdiv_qr.c
index eda950103..ad8294502 100644
--- a/mpz/tdiv_qr.c
+++ b/mpz/tdiv_qr.c
@@ -1,8 +1,8 @@
/* mpz_tdiv_qr(quot,rem,dividend,divisor) -- Set QUOT to DIVIDEND/DIVISOR,
and REM to DIVIDEND mod DIVISOR.
-Copyright 1991, 1993, 1994, 2000, 2001, 2005, 2011, 2012 Free Software
-Foundation, Inc.
+Copyright 1991, 1993, 1994, 2000, 2001, 2005, 2011, 2012, 2021 Free
+Software Foundation, Inc.
This file is part of the GNU MP Library.
@@ -36,7 +36,7 @@ see https://www.gnu.org/licenses/. */
void
mpz_tdiv_qr (mpz_ptr quot, mpz_ptr rem, mpz_srcptr num, mpz_srcptr den)
{
- mp_size_t ql;
+ mp_size_t ql, n0;
mp_size_t ns, ds, nl, dl;
mp_ptr np, dp, qp, rp;
TMP_DECL;
@@ -95,7 +95,12 @@ mpz_tdiv_qr (mpz_ptr quot, mpz_ptr rem, mpz_srcptr num, mpz_srcptr den)
np = tp;
}
- mpn_tdiv_qr (qp, rp, 0L, np, nl, dp, dl);
+ for (n0 = 0; *dp == 0; ++dp)
+ {
+ rp [n0++] = *np++;
+ --nl;
+ }
+ mpn_tdiv_qr (qp, rp + n0, 0L, np, nl, dp, dl - n0);
ql -= qp[ql - 1] == 0;
MPN_NORMALIZE (rp, dl);
diff --git a/mpz/tdiv_r.c b/mpz/tdiv_r.c
index c76275e53..b0c38d610 100644
--- a/mpz/tdiv_r.c
+++ b/mpz/tdiv_r.c
@@ -1,7 +1,7 @@
/* mpz_tdiv_r(rem, dividend, divisor) -- Set REM to DIVIDEND mod DIVISOR.
-Copyright 1991, 1993, 1994, 2000, 2001, 2005, 2012 Free Software Foundation,
-Inc.
+Copyright 1991, 1993, 1994, 2000, 2001, 2005, 2012, 2021 Free Software
+Foundation, Inc.
This file is part of the GNU MP Library.
@@ -35,7 +35,7 @@ see https://www.gnu.org/licenses/. */
void
mpz_tdiv_r (mpz_ptr rem, mpz_srcptr num, mpz_srcptr den)
{
- mp_size_t ql;
+ mp_size_t ql, n0;
mp_size_t ns, nl, dl;
mp_ptr np, dp, qp, rp;
TMP_DECL;
@@ -88,7 +88,12 @@ mpz_tdiv_r (mpz_ptr rem, mpz_srcptr num, mpz_srcptr den)
np = tp;
}
- mpn_tdiv_qr (qp, rp, 0L, np, nl, dp, dl);
+ for (n0 = 0; *dp == 0; ++dp)
+ {
+ rp [n0++] = *np++;
+ --nl;
+ }
+ mpn_tdiv_qr (qp, rp + n0, 0L, np, nl, dp, dl - n0);
MPN_NORMALIZE (rp, dl);