2013-04-28 52 views

回答

0

您种下了PRNG吗?

例如,math.randomseed(os.time())

3

Lua使用C运行时库的伪随机数发生器。其属性取决于您的平台。例如,在某些版本的Windows上,生成器始终在伪随机序列的同一点进行初始化,因此运行程序时总是会得到相同的值序列(请参阅http://msdn.microsoft.com/en-US/library/f0d4wb4t.aspx)。

您可以使用math.randomseed在别处启动伪随机序列。您可以使用os.time在每次运行程序时使用不同的值进行初始化(假设您允许运行间隔至少一秒)。

还要注意,在某些Windows C运行时库中,调用srand(或Lua中的math.randomseed)后得到的第一个伪随机值非常依赖于传递的值。所以我建议在调用math.randomseed后调用math.random一次并忽略它的结果。

3

这不一定是正确的。所有的随机数字不是完全随机的。作为一个例子,你可以看看这个工作代码;这与您发布的问题相同:http://eval.in/17806

您可以看到的输出是。

从DOUB的答复引述:

您可以使用math.randomseed启动伪随机序列 别处。您可以使用os.time在每次运行程序时使用不同的 值进行初始化(假设您允许在两次运行之间经过至少一个 秒)。

这里是在行动randomseed同一个程序的例子:http://eval.in/17808

math.randomseed(os.time()) 
x = math.random(17,41) 
print(x) 
+0

使用math.randomseed(os.time())工作的第一次,我用它,但然后不停返回无论我在执行过程中允许经过多少秒钟,它的值都是相同的。思考? – user2218101 2013-04-29 21:29:51

+0

@ user2218101你能提供你的代码吗? – hjpotter92 2013-04-29 22:47:17

+0

您需要在每次调用math.random() – moorepants 2013-09-19 18:59:00