为什么math.random(99999999999)在Lua中返回1?
我刚刚试过:为什么math.random(99999999999)在Lua中返回1?,math,random,lua,Math,Random,Lua,我刚刚试过:print(math.random(9999999999999))它已经打印了1 另外,任何包含9999999999的math.random()都在打印相同的内容。一些例子: 打印(数学随机(1.99999999999))>1 for k,v in next,{math.random(999999999999), math.random(1999999999999), math.random(2.999999999999)} do print(v) end local n
print(math.random(9999999999999))
它已经打印了1
另外,任何包含9999999999
的math.random()
都在打印相同的内容。一些例子:
打印(数学随机(1.99999999999))
>1
for k,v in next,{math.random(999999999999), math.random(1999999999999), math.random(2.999999999999)} do
print(v)
end
local n = math.random(999999999999)
print(n==1)
print(math.random(199999999999))
»1
for k,v in next,{math.random(999999999999), math.random(1999999999999), math.random(2.999999999999)} do
print(v)
end
local n = math.random(999999999999)
print(n==1)
»1
for k,v in next,{math.random(999999999999), math.random(1999999999999), math.random(2.999999999999)} do
print(v)
end
local n = math.random(999999999999)
print(n==1)
»true
那我想你明白了(当然,如果你认识卢阿的话)。你能给我解释一下吗
@编辑:
我使用的Lua版本是5.2
我还尝试了
打印(math.random(-9999999999999))
,它打印了111711452
。它看起来像一个正数。这个问题肯定是因为math.random
处理Lua5.1和/或5.2中传递的输入参数。从[mathlib.c]
:
正如您在C
中所知,标准int可以表示值-2147483648
到2147483647
。将+1
添加到2147483647
,就像在您的用例中一样,将溢出并环绕给出的值-2147483648
。最终结果是负数,因为您将正数乘以负数
有几种方法可以纠正和处理此问题:
math.random(上)
生成介于1和之间的整数
上限。上限和下限必须为整数。在另一种情况下,Lua将强制转换
上限转换为整数,有时给出math.floor(上限)
和其他
math.ceil(上部)
,具有意外结果(下部相同)
print(math.random(9999999999))
对我来说很好用。您使用的是哪一版本的Lua?该版本是5.2。我认为Lua 5.2在Linux和Mac OS X中都可以正常工作。@Mandy8055 Windows 8.1 OS。我在Transformice游戏中尝试过这个脚本,它使用Lua5.2。那么也许问题应该出现在游戏API和/或Lua版本上,就像你在回答中提到的那样?也许!我在windows 10上使用了Lua,遇到了同样的问题,然后我最终修复了它。但问题的解释与我提到的相同,因为它包含了溢出值。在Linux和Mac OS X中,Lua 5.2对我来说都很好。