Emacs Lisp数字运算(实际上,简单的加法)

hat*_*rix 2 emacs elisp

当我尝试在emacs lisp中进行一些计算时,这就是我得到的...

(+ 2082844800. 1274511600.0)
=> 1209872752.0
(+ 2082844800.0 1274511600.0)
=> 3357356400.0
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我发生了什么,.以及.0在结尾处表示浮点数之间的区别是什么?谢谢

Tre*_*son 7

在Anton的回答和jamessan的回答的基础上,阅读最新的NEWS文件:

看起来你有一个32位的Emacs版本.Emacs对整数有一个限制most-positive-fixnum,传统上它是26843545532位版本.在最新的Emacs(23.2)中,NEWS文件表明:

**Lisp读取器将太大/小的整数转换为浮点数.例如,在 536870911' is the largest integer, reading536870912'给出浮点对象"536870912.0"的机器上.

这种变化只涉及Lisp读者; 它不会影响实际整数对象的溢出方式.

因此,在23.1及更早版本(在32位Emacs上),2082844800.被读为整数,但是太大,导致它溢出并变成-64638848.

.0在23.1中添加后缀迫使lisp阅读器将数字视为浮点数,从而导致数学结果如您所愿.

在Emacs 23.2中,如果数字太大,读者会自动从整数转换为浮点数.因此,如果您升级,您将不必担心这一点.