diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2012-05-24 10:12:28 +0200 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2012-05-24 10:12:28 +0200 |
commit | 908987076649a0e51310803f7c0ad61a8198026a (patch) | |
tree | 098bdb77cbff6bf682ea713733e98fc0b33a663f /mpz | |
parent | 8b9e31a23847f806a9a0cb521a596bc52eaa1ec8 (diff) | |
download | gmp-908987076649a0e51310803f7c0ad61a8198026a.tar.gz |
mpz/remove.c: Support negative divisor, and test them.
Diffstat (limited to 'mpz')
-rw-r--r-- | mpz/remove.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/mpz/remove.c b/mpz/remove.c index 70ddf2cf1..68a63da36 100644 --- a/mpz/remove.c +++ b/mpz/remove.c @@ -31,18 +31,19 @@ mpz_remove (mpz_ptr dest, mpz_srcptr src, mpz_srcptr f) if (UNLIKELY (mpz_cmpabs_ui (f, 1) <= 0)) DIVIDE_BY_ZERO; - if (SIZ (src) == 0) + if (UNLIKELY (SIZ (src) == 0)) { - if (src != dest) - mpz_set (dest, src); + SIZ (dest) = 0; return 0; } - if (mpz_cmp_ui (f, 2) == 0) + if (mpz_cmpabs_ui (f, 2) == 0) { mp_bitcnt_t s0; s0 = mpz_scan1 (src, 0); mpz_div_2exp (dest, src, s0); + if (s0 & (SIZ (f) < 0)) /*((s0 % 2 == 1) && (SIZ (f) < 0))*/ + mpz_neg (dest, dest); return s0; } |