当我尝试在emacs lisp中进行一些计算时,这就是我得到的...
(+ 2082844800. 1274511600.0)
=> 1209872752.0
(+ 2082844800.0 1274511600.0)
=> 3357356400.0
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我发生了什么,.以及.0在结尾处表示浮点数之间的区别是什么?谢谢
在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中,如果数字太大,读者会自动从整数转换为浮点数.因此,如果您升级,您将不必担心这一点.