我刚试过:print(math.random(999999999999))
并打印了1
。
包含math.random()
的任何999999999999
也会打印相同的内容。一些例子:
print(math.random(1.999999999999))
»1
print(math.random(1999999999999))
»1
for k,v in next,{math.random(999999999999), math.random(1999999999999), math.random(2.999999999999)} do
print(v)
end
»1
local n = math.random(999999999999)
print(n==1)
»true
然后我想你明白了(如果你知道Lua的话)。你能解释一下吗?
@Edits:
我使用的Lua版本是5.2。
我还尝试了print(math.random(-999999999999))
并打印了111711452
。它看起来像是一个正数。
答案 0 :(得分:5)
这个问题肯定是因为math.random
处理Lua 5.1和/或5.2中传递的输入参数。来自[mathlib.c]
1:
正如您在C
中所知,标准int可以将值-2,147,483,648
表示为2,147,483,647
。将+1
添加到2,147,483,647
,就像在用例中一样,会溢出并包围给出-2,147,483,648
的值。最终结果是否定的,因为您将正数与负数相乘。
有几种方法可以纠正和解决这个问题:
对于您的上一次查询,请阅读文档:http://lua-users.org/wiki/MathLibraryTutorial
注意最后一行引号:
math.random(upper)
生成 1和之间的整数 upper .upper和lower必须是整数。在其他情况下,Lua施放 上限为整数,有时给出math.floor(upper)
和其他math.ceil(upper)
,意外结果(下限相同)。