为什么Lua和Python因子输出不同

时间:2017-09-20 09:13:56

标签: python lua

enter image description here

--t.lua
function fact(n)
    if n == 0 then
        return 1
    else
        return n * fact(n-1)
    end
end

for i=1,100,1 do
    print(i,fact(i))
end
# t.py
fact = lambda n:1 if n == 0 else n * fact(n-1)

for i in range(1, 100):
    print(i, fact(i))

当我在Lua和Python中编写析因代码时,我发现输出不同。

3 个答案:

答案 0 :(得分:8)

通常配置的Lua使用平台通常的双精度浮点格式来存储所有数字(这意味着所有数字类型)。对于今天的大多数桌面平台,这将是64位IEEE-754格式。传统观点认为,可以安全地假设-1E15到+ 1E15范围内的整数被精确表示。为了处理Lua中的大量数字,关键词是“bignum”和“任意精确数字”。您可以使用pure-Lua模块。例如(bignumlua-nums)和基于C的模块lmapm。另请阅读此thread

Python支持这样一种已知的“bignum”整数类型,它可以处理任意大数。在Python 2.5+中,此类型称为long,与int类型分开,但解释器将自动使用更合适的类型。在Python 3.0+中,int类型已完全删除。在Python中,通常不需要使用特殊工具来处理大量数据。

答案 1 :(得分:0)

第一张图片上有溢出,因为要存储在该var上的值很大。

答案 2 :(得分:0)

这是lbn library

的基本示例
local bn = require "bn"

function bn_fact(n)
  if n:tonumber() == 0 then return 1 end
  return n * bn_fact(n-1)
end

function fact(n)
  return bn_fact(bn.number(n))
end

for i=1,100,1 do
    print(i,fact(i))
end

某些值的输出

30  265252859812191058636308480000000
31  8222838654177922817725562880000000
32  263130836933693530167218012160000000
33  8683317618811886495518194401280000000