]> git.eshelyaron.com Git - emacs.git/commitdiff
Simplify calculator-expt
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 5 Nov 2019 07:19:36 +0000 (23:19 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 5 Nov 2019 07:39:55 +0000 (23:39 -0800)
* lisp/calculator.el (calculator-expt): Simplify, now that
expt does the right thing if the first arg is -1, 0, or 1.

lisp/calculator.el

index 281151c7c2588ed95769be4a59a8050a1474c701..fab365d5f2841fb4720472fc9aba53462e93d66c 100644 (file)
@@ -1619,30 +1619,10 @@ To use this, apply a binary operator (evaluate it), then call this."
   "Compute X^Y, dealing with errors appropriately."
   (condition-case nil
       (expt x y)
-    (domain-error 0.0e+NaN)
-    (range-error
-     (cond ((and (< x 1.0) (> x -1.0))
-            ;; For small x, the range error comes from large y.
-            0.0)
-           ((and (> x 0.0) (< y 0.0))
-            ;; For large positive x and negative y, the range error
-            ;; comes from large negative y.
-            0.0)
-           ((and (> x 0.0) (> y 0.0))
-            ;; For large positive x and positive y, the range error
-            ;; comes from large y.
-            1.0e+INF)
-           ;; For the rest, x must be large and negative.
-           ;; The range errors come from large integer y.
-           ((< y 0.0)
-            0.0)
-           ((eq (logand (truncate y) 1) 1)   ; expansion of cl `oddp'
-            ;; If y is odd
-            -1.0e+INF)
-           (t
-            ;;
-            1.0e+INF)))
-    (error 0.0e+NaN)))
+    (overflow-error
+     (if (or (natnump x) (cl-evenp y))
+        1.0e+INF
+       -1.0e+INF))))
 
 (defun calculator-fact (x)
   "Simple factorial of X."