随机数函数的内部实现
2015-1-27 11:48:12
收藏:0
阅读:163
评论:1
这是Lua语言生成随机数的语法 --
math.random()
几乎所有编程语言都有类似语法的函数。我的问题是该函数是如何实现的。它如何能够生成随机输出?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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中获取用户配置主目录的跨平台方法
一种伪随机算法通过从现有种子值产生一个看似随机的比特模式来工作。所产生的值然后被保存作为下一个随机数的种子。
大多数随机生成器最初是用系统时钟的值作为种子的。虽然时间是一个相对可预测的值,但是它经过一次随机算法后就足够随机了(对于大多数应用程序)。
该算法产生一系列看似不相关的值,因此它们可以用作随机值。因为自然上存在值之间的关系,即使它非常复杂,这些值实际上是伪随机的。
一个简单的随机算法,用于速度较慢且机器字更小的计算机,是将种子值乘以一个质数,加一,并得到所需机器字的低位。示例(C#):
static ushort seed = 42; public static ushort random() { seed = (ushort)(seed * 8747 + 1); return seed; }函数在第一次调用时返回这些值:
39695 2438 25987 29442 38231 41886 30603 35418 12575 24118 65299 24114 30311 37198 50203 34442 60719 5350 3747 7010 40311 16638 42667 46266 3903 60822 54323 27282 19079 29358 24379 54506 55119 43078 36803 3010 48535 58974 11723 42778 34143 1270 33107 48882 13991 23566 21083 60234 22895 50086 59619 17442 62903 37822 3307 24954 37759 42070 1651 23378 15047 19822 40315 51626 29583 26374 6659 50306 17879 18718 17419 58330 14751 52150 25491 16306 22247 18126 16539 28682 9647 37478 8995 36066 44535 1662 54059 11834 30655 31510 39091 27666 35591 18478 15291 56938 28623 17862 1091 40258如您所见,即使是这样一种简单的算法也能给出相当不错的结果。然而,现代随机生成器使用更复杂的算法,如Mersenne扭曲器。