emacs-diffs
[Top][All Lists]
Advanced

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

master 3843711 3/3: Simplify calculator-expt


From: Paul Eggert
Subject: master 3843711 3/3: Simplify calculator-expt
Date: Tue, 5 Nov 2019 02:40:04 -0500 (EST)

branch: master
commit 3843711abd8d599206acbcc0aa97dae708285416
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    Simplify calculator-expt
    
    * 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 | 28 ++++------------------------
 1 file changed, 4 insertions(+), 24 deletions(-)

diff --git a/lisp/calculator.el b/lisp/calculator.el
index 281151c..fab365d 100644
--- a/lisp/calculator.el
+++ b/lisp/calculator.el
@@ -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."



reply via email to

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