Lua 中随机数生成的问题
2021-12-27 16:49:44
收藏:0
阅读:348
评论:1
我在使用 Lua 解释器时写了一个小程序,生成两个数字并进行比较。程序一直运行到两个数字相等为止。第一个数字是使用 math.random() 随机生成的,设置在 1 和 100000 之间。生成的第二个数字也在 1 和 100 之间用于比较。程序还记录运行的次数。程序按预期运行,但是当我运行它时发生了一些奇怪的事情。产生的数字始终只有 1、31、62 或 92。我运行了很多次程序,但它一直生成这些数字。我对如何生成随机数有一些了解,但这似乎很奇怪。我将在下面粘贴代码。如果有人能解释一下这里发生了什么,我会非常感激。谢谢!
counter=0;
a=0;
b=1;
while(a~=b)do
a=math.random(1,1000000);
b=math.random(1,100);
counter=counter+1;
if(a==b)then
print(a..", "..b..", and it took "..counter.." times")
end
end
原文链接 https://stackoverflow.com/questions/70498233
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
Lua 5.4 中的伪随机数生成器的行为已经改变。5.4 参考手册 根据§8.2 – Incompatibilities in the Libraries,指出:
如果你感到好奇,新算法是
xoshiro256**
。这意味着在 Lua 5.4 之前运行的程序必须显式调用
math.randomseed
来初始化伪随机数生成器。你只需要在程序中执行一次。如果不初始化伪随机数生成器,每次运行程序生成的数字序列都将是相同的。这是因为在 5.4 之前,Lua 的
math.random
是使用 C 的rand
或 POSIX 的random
实现的,如果没有显式设置种子,则默认为1
。初始化伪随机数生成器的经典方法是使用当前时间(
os.time
)。这是一个简单的方法,但它有一个缺陷,就是在同一秒内两次运行程序将得到相同的结果。local counter = 0 local a = 0 local b = 1 math.randomseed(os.time()) while a ~= b do a = math.random(1, 1000000) b = math.random(1, 100) counter = counter + 1 if a == b then print(a .. ", " .. b .. ", and it took " .. counter .. " times") end end
文档链接,以供比较:
5.3:
math.random
math.randomseed
5.4:
math.random
math.randomseed