Building on Anton's answer and jamessan's answer, and reading the latest NEWS file:
It looks like you've got a 32-bit build of Emacs. Emacs has a limit for integers that is most-positive-fixnum
, which has traditionally been 268435455
for 32-bit builds. In the latest Emacs (23.2), the NEWS file indicates:
** The Lisp reader turns integers that are too large/small into floats. For
instance, on machines where
536870911' is the largest integer,
reading
536870912' gives the
floating-point object `536870912.0'.
This change only concerns the Lisp
reader; it does not affect how actual
integer objects overflow.
So, in 23.1 and earlier (on a 32-bit Emacs), 2082844800.
was read as an integer, but is too big, causing it to overflow and turn into -64638848
.
Adding the .0
suffix in 23.1 forced the lisp reader to treat the number as floating point, causing the math to turn out as you expect.
In Emacs 23.2, the reader does this conversion from integer to float for you automatically if the number is too large. So if you upgrade, you won't have to worry about this.