emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 5463b7e: * lisp/emacs-lisp/cl-extra.el (cl-isqrt):


From: Stefan Monnier
Subject: [Emacs-diffs] master 5463b7e: * lisp/emacs-lisp/cl-extra.el (cl-isqrt): Speed up bignum case
Date: Tue, 25 Jun 2019 17:08:06 -0400 (EDT)

branch: master
commit 5463b7e77ab4f22bb10192fb23af6df88dde37e6
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    * lisp/emacs-lisp/cl-extra.el (cl-isqrt): Speed up bignum case
---
 lisp/emacs-lisp/cl-extra.el | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 9053329..ca33c56 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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]