Lua中math.random()和math.randomseed()之间的区别

Sal*_*zir 1 lua random-seed

我正在使用Corona SDK和Lua作为编程语言进行游戏.从表中获取随机数时,我很困惑使用以下哪一项?

math.random()
math.randomseed()
Run Code Online (Sandbox Code Playgroud)

有人会详细说明它们之间的确切区别吗?所以我可以在我的情况下使用最好的一个.

小智 6

如果调用时需要相同的顺序math.random(),则必须math.randomseed(same number every time before calling)在调用前进行设置math.random()

如果您想要不同的随机数序列,请math.randomseed(os.time())在调用之前传递,math.random()因为os.time()将返回以秒为单位的时间,因此每次都会不同。

请参考以下链接并在那里检查示例。

https://docs.coronalabs.com/api/library/math/randomseed.html

  • 每次调用 math.random 时,您都不应该将 math.randomseed 设置为 os.time!种子将靠近在一起,实际上随机性会降低。只需在开始时调用它,然后让 math.random 完成它的工作。 (5认同)

lhf*_*lhf 5

math.random给你随机数.您可能会在需要随机数的程序中多次调用它.

math.randomseed确定从哪里开始随机数序列math.random.您可能只需要在需要随机数的程序中调用一次.

math.randomseed在每次打电话之前,您需要打电话似乎是一种常见的误解math.random.这是错误的,将打败随机性math.random.

  • 我很高兴你提到了最后一部分。师父没有,我在检查你的之前评论了哈哈。 (2认同)
  • 我还要补充说,使用相同数字调用`randomseed`会给你相同的`random`返回的数字序列,这在游戏测试中有时很方便. (2认同)

Dig*_*eer 5

当您执行一个使用math.random而不设置的程序时math.randomseed,它通常会产生相同的随机数集。这是由于这样的事实,math.randomseed负责设置默认seed(或算法发电机)通过带出的随机数math.random

这种一致性显然不是随机的。举个例子——先去Lua Demo网站,然后插入这段代码:

for i = 1,10 do
print(math.random())
end
Run Code Online (Sandbox Code Playgroud)

不断点击运行按钮,看看解释器如何每次产生相同的数字。但是,要更改生成随机数的“种子”,我们可以将“种子”设置为当前时间(因为当前时间永远不会重复)

这次去网站上多次执行这段代码:

math.randomseed(os.time())
for i = 1,10 do
print(math.random())
end
Run Code Online (Sandbox Code Playgroud)

您现在应该注意每次将如何获得不同的数字。