阶乘实现和Lua运行时

我在Lua中实现了一个简单的阶乘函数,对于一些不太高的数字,比如25,结果是不正确的。我在Mac OS 10.11.2上自己编译了来自Lua.org的版本5.3.4-rc3。

function fact(n)
  if n == 0 then return 1 end
  if n < 0 then return 0 end

  return n * fact(n-1)
end

--25! = 15511210043330985984000000 . 来自http://www.wolframalpha.com/input/?i=25!
local n = 15511210043330985984000000
assert(n == 15511210043330985984000000)
print(n)
assert(fact(4) == 24)
assert(fact(10) == 3628800)
print(fact(25))
assert(fact(25) == 15511210043330985984000000) --问题出在这里!

我可以看到问题出在“print(fact(25))”上,并且这在最后一行的断言中被检查。我使用Lua版本5.2.4,5.3.3和5.3.4-rc3测试了代码,并且遇到了相同的问题。在版本5.3.2上问题不会发生,但是该版本存在与数字/字符串转换相关的另一个问题。在该版本上,我还测试了25!,35!,100!等值,没有任何问题。

点赞