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