diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2021-12-30 18:08:00 +0100 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2021-12-30 18:08:00 +0100 |
commit | 80f8687c11422ed3cbf82f5202a40f8cf9b80940 (patch) | |
tree | 8d426743c4c024489199781ec8aa715528eb6420 /mpz | |
parent | 650368f11361f45af429cac9690c9d85885d765c (diff) | |
download | gmp-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.c | 13 | ||||
-rw-r--r-- | mpz/tdiv_r.c | 13 |
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); |