在Emacs/Elisp中的大数问题

12

Emacs是否支持无法容纳在整数中的大数?如果支持,我该如何使用它们?

2个回答

12

对于Emacs Lisp程序员而言,如果受限于Emacs不支持的大数处理,可以使用calc.el提供的非常好的大数能力。——EmacsWiki

calc.el是GNU Emacs发行版的一部分。请查看其源代码以获取可用函数。您可以通过输入M-x quick-calc立即开始尝试运行它。您还可以查看bigint.el包,它是一个轻量级的非标准实现,用于处理大数。


看起来这个可以胜任...calc 一开始看起来有点令人生畏,但我最终会弄明白的。谢谢。 - Tal Pressman

2
Emacs 27.1现在原生支持大整数(请参阅Emacs的NEWS文件):
- Emacs Lisp整数现在可以是任意大小。 - Emacs使用GNU多精度(GMP)库来支持太大无法本地支持的整数。本地支持的整数称为“fixnums”,而较大的整数称为“bignums”。新谓词“bignump”和“fixnump”可用于区分这两种类型的整数。 - 所有算术,比较和逻辑(也称为“按位”)操作都支持 fixnums 和 bignums。但是,请注意,与fixnums不同,bignums将不会与'eq'相等,您必须使用'eql'。 (当然,'='对两者进行数字比较是有效的。) - 由于大型bignums消耗大量内存,Emacs限制Lisp程序可以创建的最大bignum大小。新变量'integer-width'的非负值指定bignum中允许的最大位数。如果超过此限制,则Emacs会发出整数溢出错误。 - 几个原始函数以前返回浮点数或整数列表以表示不适合fixnums的整数。这些函数现在仅返回整数。受影响的函数包括计算代码点的'encode-char'、计算文件大小和其他属性的'file-attributes'、计算进程ID的'process-id'以及计算用户和组ID的'user-uid'和'group-gid'等函数。
当使用fixnums进行算术计算时溢出fixnum范围时,将自动选择bignums。表达式`(bignump most-positive-fixnum)`返回`nil`,而`(bignump (+ most-positive-fixnum 1))`返回`t`。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接