]> git.eshelyaron.com Git - emacs.git/commitdiff
(math-read-number): Replace number by variable.
authorJay Belanger <jay.p.belanger@gmail.com>
Sat, 7 Jul 2007 04:15:40 +0000 (04:15 +0000)
committerJay Belanger <jay.p.belanger@gmail.com>
Sat, 7 Jul 2007 04:15:40 +0000 (04:15 +0000)
(math-read-number-simple): Properly parse small integers.

lisp/ChangeLog
lisp/calc/calc.el

index f362942db4cf3bcaf2a08d2dd7d888696dd0bb39..4aedca28f8639515689f97a5f2ed23d2587ce522 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-07  Jay Belanger  <jay.p.belanger@gmail.com>
+
+       * calc/calc.el (math-read-number): Replace number by variable.
+       (math-read-number-simple): Properly parse small integers.
+
 2007-07-07  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * vc.el: Fix doc for the checkout function.
index d81c1070b9f3fc19a7d522030b6e31d2dbbca38e..922a7c8d7f839ddc9ead66561380cf47701aa9f7 100644 (file)
@@ -3401,6 +3401,7 @@ largest Emacs integer.")
 
 ;;; Parse a simple number in string form.   [N X] [Public]
 (defun math-read-number (s)
+  "Convert the string S into a Calc number."
   (math-normalize
    (cond
 
@@ -3411,7 +3412,7 @@ largest Emacs integer.")
                (> (length digs) 1)
                (eq (aref digs 0) ?0))
           (math-read-number (concat "8#" digs))
-        (if (<= (length digs) 6)
+        (if (<= (length digs) (* 2 math-bignum-digit-length))
             (string-to-number digs)
           (cons 'bigpos (math-read-bignum digs))))))
 
@@ -3459,13 +3460,20 @@ largest Emacs integer.")
 
 ;;; Parse a very simple number, keeping all digits.
 (defun math-read-number-simple (s)
+  "Convert the string S into a Calc number.
+S is assumed to be a simple number (integer or float without an exponent)
+and all digits are kept, regardless of Calc's current precision."
    (cond
     ;; Integer
     ((string-match "^[0-9]+$" s)
-     (cons 'bigpos (math-read-bignum s)))
+     (if (<= (length s) (* 2 math-bignum-digit-length))
+         (string-to-number s)
+       (cons 'bigpos (math-read-bignum s))))
     ;; Minus sign
     ((string-match "^-[0-9]+$" s)
-     (cons 'bigneg (math-read-bignum (substring s 1))))
+     (if (<= (length s) (1+ (* 2 math-bignum-digit-length)))
+         (string-to-number s)
+       (cons 'bigneg (math-read-bignum (substring s 1)))))
     ;; Decimal point
     ((string-match "^\\(-?[0-9]*\\)\\.\\([0-9]*\\)$" s)
      (let ((int (math-match-substring s 1))