]> git.eshelyaron.com Git - emacs.git/commitdiff
[etc/ChangeLog]
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 3 May 2011 16:33:36 +0000 (09:33 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 3 May 2011 16:33:36 +0000 (09:33 -0700)
* NEWS: Integer overflow now yields floating-point instead of
wrapping around.
[doc/lispref/ChangeLog]
* numbers.texi (Arithmetic Operations, Math Functions): Large integers go to
floats instead of wrapping around.
* objects.texi (Integer Type): Likewise.

doc/lispref/ChangeLog
doc/lispref/numbers.texi
doc/lispref/objects.texi
etc/ChangeLog
etc/NEWS

index 163de31f22098945759b3b15d8283b1919f37716..a48fa634cb7148fd1b47e64df836c5d769604a75 100644 (file)
@@ -1,6 +1,9 @@
 2011-05-03  Paul Eggert  <eggert@cs.ucla.edu>
 
        * numbers.texi (Integer Basics): Large integers are treated as floats.
+       (Arithmetic Operations, Math Functions): Large integers go to
+       floats instead of wrapping around.
+       * objects.texi (Integer Type): Likewise.
 
 2011-04-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
index 2c73a03a26c5f90c6d201ef88762bf369900fb0a..ebf5660febe25edf7993bdcb40db7ba61506ae0e 100644 (file)
@@ -507,9 +507,9 @@ commonly used.
   All of these functions except @code{%} return a floating point value
 if any argument is floating.
 
-  It is important to note that in Emacs Lisp, arithmetic functions
-do not check for overflow.  Thus @code{(1+ 268435455)} may evaluate to
-@minus{}268435456, depending on your hardware.
+  If integer arithmetic overflows, the resulting value is converted
+to floating point.  Thus @code{(1+ 536870911)} may evaluate to
+536870912.0, depending on your hardware.
 
 @defun 1+ number-or-marker
 This function returns @var{number-or-marker} plus 1.
@@ -826,7 +826,7 @@ On the other hand, shifting one place to the right looks like this:
 As the example illustrates, shifting one place to the right divides the
 value of a positive integer by two, rounding downward.
 
-The function @code{lsh}, like all Emacs Lisp arithmetic functions, does
+The function @code{lsh} does
 not check for overflow, so shifting left can discard significant bits
 and change the sign of the number.  For example, left shifting
 536,870,911 produces @minus{}2 on a 30-bit machine:
@@ -1169,8 +1169,8 @@ approximately.
 
 @defun expt x y
 This function returns @var{x} raised to power @var{y}.  If both
-arguments are integers and @var{y} is positive, the result is an
-integer; in this case, overflow causes truncation, so watch out.
+arguments are integers and @var{y} is nonnegative, the result is an
+integer if it is in Emacs integer range.
 @end defun
 
 @defun sqrt arg
index c58d54f13fc8f74839dce7e4874de118a6bf9a37..6dd7878e53ba7ba1d1a055e4ab75d24641a62683 100644 (file)
@@ -179,10 +179,10 @@ to
 @tex
 @math{2^{29}-1})
 @end tex
-on most machines.  (Some machines may provide a wider range.)  It is
-important to note that the Emacs Lisp arithmetic functions do not check
-for overflow.  Thus @code{(1+ 536870911)} is @minus{}536870912 on most
-machines.
+on most machines.  (Some machines may provide a wider range.)
+If integer arithmetic overflows, the resulting value is converted
++to floating point.  Thus @code{(1+ 536870911)} may evaluate to
++536870912.0, depending on your hardware.
 
   The read syntax for integers is a sequence of (base ten) digits with an
 optional sign at the beginning and an optional period at the end.  The
@@ -195,7 +195,8 @@ leading @samp{+} or a final @samp{.}.
 1                ; @r{The integer 1.}
 1.               ; @r{Also the integer 1.}
 +1               ; @r{Also the integer 1.}
-1073741825       ; @r{Also the integer 1 on a 30-bit implementation.}
+1073741825       ; @r{The floating point number 1073741825.0,}
+                 ; @r{on a 30-bit implementation.}
 @end group
 @end example
 
index 0eb21406105ce099cb4355f269a90cfd8075f4d3..bd91ccc1c3994498d63b1fa1cb7fb0ebe861678f 100644 (file)
@@ -1,3 +1,8 @@
+2011-05-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * NEWS: Integer overflow now yields floating-point instead of
+       wrapping around.
+
 2011-05-03  Leo Liu  <sdl.web@gmail.com>
 
        * NEWS: Mention the new command isearch-yank-pop.
index 5094ecfc4fc365fce61510e50d92eb42f2e78919..669c143ba7f05114e44f44c475cd94d7b3892010 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -728,6 +728,12 @@ soap-inspect.el is an interactive inspector for SOAP WSDL structures.
 \f
 * Incompatible Lisp Changes in Emacs 24.1
 
++++
+** Integer arithmetic overflow now yields the nearest floating-piont
+value rather than wrapping around.  For example, on a 32-bit machine,
+(1+ 536870911) yields 536870912.0, instead of the -536870912 it
+yielded in Emacs 23.3, or the 0 it yielded in Emacs 23.1.
+
 ---
 ** `char-direction-table' and the associated function `char-direction'
 were deleted.  They were buggy and inferior to the new support of