在Lua中随机数如何生成,能否改写成长尾?
- 内容介绍
- 文章标签
- 相关推荐
本文共计276个文字,预计阅读时间需要2分钟。
我尝试使用Lua生成一个随机数,但只输出最低值。例如,如果运行:`x=math.random(1, 41); print(x)`,它返回:`17`。为什么?Lua使用C运行时库生成随机数。其属性取决于您的平台。例如,在某个平台上:
我试图使用lua产生一个随机数,但它只是吐出最低值.例如,如果我运行:x = math.random(17,41) print(x)
它返回:
17
怎么了?
Lua使用C运行时库伪随机数生成器.其属性取决于您的平台.例如,在某些版本的Windows上,生成器始终在伪随机序列的同一点进行初始化,因此在运行程序时始终可以获得相同的值序列(参见 msdn.microsoft.com/en-US/library/f0d4wb4t.aspx).您可以使用math.randomseed在其他地方启动伪随机序列.每次运行程序时,都可以使用os.time以不同的值初始化它(假设在运行之间允许至少一秒钟).
另请注意,在某些Windows C运行时库中,调用srand(或Lua中的math.randomseed)后得到的第一个伪随机值非常依赖于您传递的值.所以我建议调用math.random一次并在调用math.randomseed后忽略它的结果.
本文共计276个文字,预计阅读时间需要2分钟。
我尝试使用Lua生成一个随机数,但只输出最低值。例如,如果运行:`x=math.random(1, 41); print(x)`,它返回:`17`。为什么?Lua使用C运行时库生成随机数。其属性取决于您的平台。例如,在某个平台上:
我试图使用lua产生一个随机数,但它只是吐出最低值.例如,如果我运行:x = math.random(17,41) print(x)
它返回:
17
怎么了?
Lua使用C运行时库伪随机数生成器.其属性取决于您的平台.例如,在某些版本的Windows上,生成器始终在伪随机序列的同一点进行初始化,因此在运行程序时始终可以获得相同的值序列(参见 msdn.microsoft.com/en-US/library/f0d4wb4t.aspx).您可以使用math.randomseed在其他地方启动伪随机序列.每次运行程序时,都可以使用os.time以不同的值初始化它(假设在运行之间允许至少一秒钟).
另请注意,在某些Windows C运行时库中,调用srand(或Lua中的math.randomseed)后得到的第一个伪随机值非常依赖于您传递的值.所以我建议调用math.random一次并在调用math.randomseed后忽略它的结果.

