diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2018-09-04 10:24:51 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2018-09-04 10:25:11 -0700 |
commit | 628f6a2c7a9fe476b7e71efed3a8f8784a00cc54 (patch) | |
tree | db0acf740fb86590b5be540e262cc6d0e3b79257 | |
parent | 1d84e6523250ab6d14f40fba3922c56d7a40416f (diff) | |
download | emacs-628f6a2c7a9fe476b7e71efed3a8f8784a00cc54.tar.gz emacs-628f6a2c7a9fe476b7e71efed3a8f8784a00cc54.tar.bz2 emacs-628f6a2c7a9fe476b7e71efed3a8f8784a00cc54.zip |
Tweak nthcdr for bignum efficiency
* src/fns.c (Fnthcdr): Use mpz_tdiv_ui and mpz_tdiv_r
instead of mpz_mod_ui and mpz_mod, as they are more efficient.
Suggested by Pip Cet in:
https://lists.gnu.org/r/emacs-devel/2018-09/msg00073.html
-rw-r--r-- | src/fns.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/fns.c b/src/fns.c index 8b25492eaeb..5a98f148818 100644 --- a/src/fns.c +++ b/src/fns.c @@ -1470,11 +1470,11 @@ DEFUN ("nthcdr", Fnthcdr, Snthcdr, 2, 2, 0, CYCLE_LENGTH. */ /* Add N mod CYCLE_LENGTH to NUM. */ if (cycle_length <= ULONG_MAX) - num += mpz_mod_ui (mpz[0], XBIGNUM (n)->value, cycle_length); + num += mpz_tdiv_ui (XBIGNUM (n)->value, cycle_length); else { mpz_set_intmax (mpz[0], cycle_length); - mpz_mod (mpz[0], XBIGNUM (n)->value, mpz[0]); + mpz_tdiv_r (mpz[0], XBIGNUM (n)->value, mpz[0]); intptr_t iz; mpz_export (&iz, NULL, -1, sizeof iz, 0, 0, mpz[0]); num += iz; |