查找 lua 中的随机数

我试图使用 lua 生成一个随机数,但它只返回最小的值。例如,如果我运行:

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

它返回:

17

出了什么问题?

点赞
用户2327366
用户2327366

你种植了 PRNG(伪随机数生成器)吗?

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

2013-04-28 02:15:37
用户67432
用户67432

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 一次并忽略其结果。

2013-04-28 02:54:09
用户1190388
用户1190388

这并不一定是真的。所有的随机数都不是完全随机的。作为一个例子,你可以看一下这个工作代码; 它和你提出来的问题是一样的: http://eval.in/17806

可以看到的输出是 38

引用来自 Doub 的回复:

你可以使用 math.randomseed 来启动伪随机序列推进在其他地方。 你可以使用 os.time(默认为以秒为单位)在每一次程序运行时初始化一个不同的 值( 假定你允许程序运行间隔至少一秒钟 )。

这是一个在 randomseed 生效的同样程序的例子: http://eval.in/17808

math.randomseed( os.time() )
x = math.random(17,41)
print(x)
2013-04-28 04:48:05