[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/calc/calc-math.el,v
From: |
Jay Belanger |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/calc/calc-math.el,v |
Date: |
Mon, 01 Oct 2007 03:15:01 +0000 |
CVSROOT: /cvsroot/emacs
Module name: emacs
Changes by: Jay Belanger <jpb> 07/10/01 03:15:01
Index: calc-math.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/calc/calc-math.el,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- calc-math.el 1 Oct 2007 02:53:29 -0000 1.27
+++ calc-math.el 1 Oct 2007 03:15:01 -0000 1.28
@@ -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