calc-math.el (math-largest-emacs-expt): Handle the cases when expt
doesn't give range errors.
This commit is contained in:
parent
f1640784ad
commit
86e405cfcb
2 changed files with 37 additions and 11 deletions
|
@ -1,3 +1,13 @@
|
|||
2007-10-01 Jay Belanger <jay.p.belanger@gmail.com>
|
||||
|
||||
* calc/calc-math.el (math-largest-emacs-expt): Handle the cases
|
||||
when `expt' doesn't give range errors.
|
||||
|
||||
2007-10-01 Markus Triska <markus.triska@gmx.at>
|
||||
|
||||
* calc/calc-math.el (math-smallest-emacs-expt): Make the
|
||||
computation more robust.
|
||||
|
||||
2007-09-30 David Kastrup <dak@gnu.org>
|
||||
|
||||
* startup.el (argv): Alias for `command-line-args-left' to use as
|
||||
|
|
|
@ -53,17 +53,33 @@
|
|||
;;; is an Emacs float, for acceptable d.dddd....
|
||||
|
||||
(defvar math-largest-emacs-expt
|
||||
(let ((x 1))
|
||||
(while (condition-case nil
|
||||
(expt 10.0 x)
|
||||
(error nil))
|
||||
(setq x (* 2 x)))
|
||||
(setq x (/ x 2))
|
||||
(while (condition-case nil
|
||||
(expt 10.0 x)
|
||||
(error nil))
|
||||
(setq x (1+ x)))
|
||||
(- x 2))
|
||||
(let ((x 1)
|
||||
(pow 1e2))
|
||||
;; The following loop is for efficiency; it should stop when
|
||||
;; 10^(2x) is too large. This could be indicated by a range
|
||||
;; error when computing 10^(2x), an infinite value for 10^(2x),
|
||||
;; or (!) a zero value for 10^(2x).
|
||||
(while (and
|
||||
pow
|
||||
(< pow 1.0e+INF)
|
||||
(> pow 0.0))
|
||||
(setq x (* 2 x))
|
||||
(setq pow (condition-case nil
|
||||
(expt 10.0 (* 2 x))
|
||||
(error nil))))
|
||||
;; The following loop should stop when 10^(x+1) is too large.
|
||||
(setq pow (condition-case nil
|
||||
(expt 10.0 (1+ x))
|
||||
(error nil)))
|
||||
(while (and
|
||||
pow
|
||||
(< pow 1.0e+INF)
|
||||
(> pow 0.0))
|
||||
(setq x (1+ x))
|
||||
(setq pow (condition-case nil
|
||||
(expt 10.0 (1+ x))
|
||||
(error nil))))
|
||||
(1- x))
|
||||
"The largest exponent which Calc will convert to an Emacs float.")
|
||||
|
||||
(defvar math-smallest-emacs-expt
|
||||
|
|
Loading…
Add table
Reference in a new issue