5

我正在尝试使用 lua 生成一个随机数,但它只是吐出最低值。例如,如果我运行:

x = math.random(17,41)  
print(x)

它返回:

17

怎么了?

4

3 回答 3

4

这不一定是真的。所有随机数都不是完全随机的。例如,您可以查看此工作代码;这与您发布的问题相同:http ://eval.in/17806

如您所见,输出为38

引用 Doub 的回复:

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

这是同一程序的示例:http randomseed: //eval.in/17808

math.randomseed( os.time() )
x = math.random(17,41)  
print(x)
于 2013-04-28T04:48:05.757 回答
3

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

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

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

于 2013-04-28T02:54:09.967 回答
0

你播种PRNG了吗?

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

于 2013-04-28T02:15:37.540 回答