From: Stefan Monnier Date: Tue, 25 Jun 2019 21:08:01 +0000 (-0400) Subject: * lisp/emacs-lisp/cl-extra.el (cl-isqrt): Speed up bignum case X-Git-Tag: emacs-27.0.90~2227 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5463b7e77ab4f22bb10192fb23af6df88dde37e6;p=emacs.git * lisp/emacs-lisp/cl-extra.el (cl-isqrt): Speed up bignum case --- diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index 90533295b68..ca33c56a958 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -332,10 +332,9 @@ If so, return the true (non-nil) value returned by PREDICATE. ;;;###autoload (defun cl-isqrt (x) - "Return the integer square root of the argument." + "Return the integer square root of the (integer) argument." (if (and (integerp x) (> x 0)) - (let ((g (cond ((<= x 100) 10) ((<= x 10000) 100) - ((<= x 1000000) 1000) (t x))) + (let ((g (ash 2 (/ (logb x) 2))) g2) (while (< (setq g2 (/ (+ g (/ x g)) 2)) g) (setq g g2))