12

emacs 是否支持不适合整数的大数字?如果是这样,我该如何使用它们?

4

2 回答 2

12

Emacs Lispers 对 Emacs 缺乏 bignum 处理感到沮丧:calc.el 提供了非常好的 bignum 功能。—<em>EmacsWiki

calc.el是 GNU Emacs 发行版的一部分。有关可用功能,请参阅其源代码。您可以通过键入立即开始使用它M-x quick-calc。您可能还想检查bigint.el package,这是一个用于处理 bignums 的非标准、轻量级实现。

于 2009-09-03T07:05:28.953 回答
1

Emacs 27.1 原生支持 bignums(参见Emacs 的 NEWS 文件):

** Emacs Lisp 整数现在可以是任意大小。Emacs 使用 GNU Multiple Precision (GMP) 库来支持因太大而无法原生支持的整数。本机支持的整数称为“fixnums”,而较大的整数称为“bignums”。新的谓词“bignump”和“fixnump”可用于区分这两种类型的整数。

bignums 有意义的所有算术、比较和逻辑(也称为“按位”)操作现在都支持 fixnums 和 bignums。但是,请注意,与 fixnums 不同,bignums 不会与 'eq' 进行比较,您必须使用 'eql' 代替。(当然,与 '=' 的数值比较对两者都有效。)

由于大的 bignum 会消耗大量内存,因此 Emacs 限制了 Lisp 程序允许创建的最大 bignum 的大小。新变量“integer-width”的非负值指定了 bignum 中允许的最大位数。如果超出此限制,Emacs 会发出整数溢出错误信号。

几个原始函数以前返回浮点数或整数列表来表示不适合固定数字的整数。这些函数现在只是简单地返回整数。受影响的函数包括像“encode-char”这样计算代码点的函数,像“file-attributes”这样计算文件大小和其他属性的函数,像“process-id”这样计算进程ID的函数,以及像“user-uid”这样的函数' 和 'group-gid' 计算用户和组 ID。

Bignums are automatically chosen when arithmetic calculations with fixnums overflow the fixnum-range. The expression (bignump most-positive-fixnum) returns nil while (bignump (+ most-positive-fixnum 1)) returns t.

于 2020-09-08T09:00:01.490 回答