gpt4 book ai didi

lisp - 是什么赋予了 Lisp 出色的数学性能?

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:27 26 4
gpt4 key购买 nike

我在一本 Lisp 教科书中读到这个:

Lisp can perform some amazing feats with numbers, especially when compared with most other languages. For instance, here we’re using the function expt to calculate the fifty-third power of 53:

CL> (expt 53 53) 
24356848165022712132477606520104725518533453128685640844505130879576720609150223301256150373

Most languages would choke on a calculation involving such a large number.

是的,这很酷,但作者没有解释为什么 Lisp 可以比其他语言更容易、更快速地做到这一点。

肯定有一个简单的原因,谁能解释一下?

最佳答案

这是一个很好的例子 "worse is not always better" .

新泽西州的做法

“传统”语言,如 C/C++/Java,具有基于硬件能力的有限范围的整数算法,例如,int32_t - 带符号的 32 位数字,当结果发生时会悄无声息地溢出不适合 32 位。这是非常快的,而且对于实际目的来说通常看起来已经足够好了,但是会导致难以发现的细微错误。

麻省理工/斯坦福风格

Lisp 采用了不同的方法。

它有一个“小的”未装箱的整数类型 fixnum ,并且当 fixnum 算术的结果不适合 fixnum 时,它会自动透明地提升为任意大小 bignum , 所以你总能得到数学上正确的结果。这意味着,除非编译器可以证明结果是 fixnum,否则它必须添加代码来检查 bignum 是否必须被分配。实际上,这在现代架构上应该具有 0 成本,但在 4 多年前做出时是一个不平凡的决定。

“传统”语言在提供 bignum 算术时,是以“库”方式提供的,即

  • 必须由用户明确请求;
  • bignum 的操作方式很笨拙:BigInteger.add(a,b) 而不是 a+b
  • 即使实际数量很小并且适合机器 int,也会产生成本。

请注意,Lisp 方法非常符合 doing the right thing 的 Lisp 传统。以一些额外的复杂性为代价。还体现在自动化内存管理上,现在是主流,但在过去遭到了恶毒的攻击。整数运算的 lisp 方法现在已用于其他一些语言(例如 python),所以进展正在发生!

关于lisp - 是什么赋予了 Lisp 出色的数学性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19678694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com