elisp:数字不能超过(expt 2 60)?

时间:2017-01-20 19:17:12

标签: lisp elisp integer-overflow

在之前的帖子中,someone表示您可以在elisp中表达任何数字,因为它会自动切换到big_nums。

但是当我打电话给(setq long_max (expt 2 60))时,我得到了

1152921504606846976

当我致电(setq long_max (expt 2 61))时,我得到了

-2305843009213693952

当我致电(setq long_max (expt 2 62))时,我得到了

0

是什么给出的?我发现上面链接的数字,32768 32768,也让我0。为什么我没有获得相同大小的整数。对于上下文,我使用Spacemacs和Org-Mode

谢谢!

2 个答案:

答案 0 :(得分:2)

默认情况下,Emacs Lisp没有bignums,如下所示:bignum in emacs/elisp(也引用了强大的calc包)。

您看到的环绕行为是因为使用模运算进行计算:请参阅https://www.gnu.org/software/emacs/manual/html_node/elisp/Integer-Basics.html#Integer-Basics

答案 1 :(得分:1)

实际上在你提到Why in LISP , there is no limitation for number?的帖子中,@ Kaz给出的答案正是你要找的。 (搜索" Emacs Lisp将整数打包成")