【问题标题】:bignum in emacs/elispemacs/elisp 中的 bignum
【发布时间】:2009-09-03 06:01:11
【问题描述】:

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

【问题讨论】:

    标签: elisp biginteger bignum


    【解决方案1】:

    Emacs Lispers 对 Emacs 的 缺少 bignum 处理:calc.el 提供了很好的 bignum 能力。—EmacsWiki

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

    【讨论】:

    • 看起来这样就可以了... calc 乍一看有点吓人,但我最终会弄明白的。谢谢。
    【解决方案2】:

    Emacs 27.1 原生支持 bignums(参见 the NEWS file of Emacs):

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

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

    由于大的 bignums 会消耗大量内存,Emacs 会限制 Lisp 程序允许创建的最大 bignum。这 新变量“整数宽度”的非负值指定 bignum 中允许的最大位数。 Emacs 表示一个整数 如果超出此限制,则会出现溢出错误。

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

    当使用 fixnums 的算术计算溢出 fixnum 范围时,会自动选择 Bignums。表达式(bignump most-positive-fixnum) 返回nil(bignump (+ most-positive-fixnum 1)) 返回t

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 2011-08-23
      • 1970-01-01
      • 2017-07-08
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多