--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中编写析因代码时,我发现输出不同。
答案 0 :(得分:8)
通常配置的Lua使用平台通常的双精度浮点格式来存储所有数字(这意味着所有数字类型)。对于今天的大多数桌面平台,这将是64位IEEE-754格式。传统观点认为,可以安全地假设-1E15到+ 1E15范围内的整数被精确表示。为了处理Lua中的大量数字,关键词是“bignum”和“任意精确数字”。您可以使用pure-Lua模块。例如(bignum和lua-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