Опираясь на ответ Антона и ответа Джеймссана и читая последний файл NEWS:
Похоже, у вас есть 32-битная сборка Emacs. Emacs имеет предел для целых чисел, равный most-positive-fixnum
, который традиционно был 268435455
для 32-битных сборок. В последних версиях Emacs (23.2) файл NEWS указывает:
** Считыватель Лиспа превращает слишком большие / маленькие целые числа в числа с плавающей точкой. За
Например, на машинах, где
536870911' is the largest integer,
reading
536870912 'дает
объект с плавающей точкой `536870912.0 '.
Это изменение касается только Лисп
читатель; это не влияет на актуальность
переполнение целочисленных объектов.
Итак, в 23.1 и более ранних версиях (в 32-битном Emacs) 2082844800.
читалось как целое число, но слишком велико, вызывая его переполнение и превращение в -64638848
.
Добавление суффикса .0
в 23.1 заставило считыватель lisp рассматривать число как число с плавающей запятой, в результате чего математика получилась, как вы ожидаете.
В Emacs 23.2 читатель выполняет это преобразование из целого числа в число с плавающей запятой автоматически, если число слишком велико. Поэтому, если вы обновитесь, вам не придется об этом беспокоиться.