我正在尝试使用 lua 生成一个随机数,但它只是吐出最低值。例如,如果我运行:
x = math.random(17,41)
print(x)
它返回:
17
怎么了?
这不一定是真的。所有随机数都不是完全随机的。例如,您可以查看此工作代码;这与您发布的问题相同: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)
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 后忽略它的结果。
你播种PRNG了吗?
例如,math.randomseed(os.time())