Commit 3843711a authored by Paul Eggert's avatar Paul Eggert

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.
parent 799d738b
Pipeline #3934 failed with stage
in 90 minutes and 1 second
......@@ -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."
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment