开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4188|回复: 169
收起左侧

[易语言纯源码] 易语言取高质量随机数-基于梅森旋转算法MT19937标准

  [复制链接]
发表于 2024-8-16 11:56:21 | 显示全部楼层 |阅读模式   广东省深圳市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
本帖最后由 1789267449 于 2024-8-16 11:58 编辑

作者
作者小曾,小曾就是我,我就是小曾!

前言
翻了大部分易语言的资料,没有太多易语言取高质量随机数的算法,然后自己无聊写了一个!MT19937标准梅森旋转算法,英文名(Mersenne Twister MT19937)是一种伪随机数生成算法。该算法基于有限二进制字段上的矩阵线性递归,利用了梅森素数作为其周期长度的基础!

原理
MT19937算法利用线性反馈移位寄存器(LFSR)来产生随机数。LFSR的反馈函数是寄存器中某些位的简单异或操作,这些位也被称为抽头序列。为了使LFSR成为最大周期的LFSR,由抽头序列加上常数1形成的多项式必须是本原多项式。本原多项式是一种特殊的不可约多项式,能够确保LFSR通过所有内部状态,产生最大长度的伪随机序列!

MT19937算法过程
  • 初始化阶段:生成一个具有624个元素的uint32数组(状态数组),这个数组是后续生成随机数的基础。
  • 旋转算法阶段:对状态数组进行旋转操作,以产生新的随机数。这一步骤通过复杂的位操作和异或运算实现。
  • 结果处理阶段:对旋转算法得到的结果进行进一步处理,如温度化,以提高随机数的质量。

具体实现
  • 初始化:给定一个初始种子(seed),通过一系列的数学变换生成状态数组的624个元素。
  • 旋转操作:对于状态数组中的每一个元素,通过特定的数学公式(涉及位移、异或等操作)计算新的值,并更新状态数组。
  • 随机数生成:通过状态数组中的元素和特定的变换规则生成伪随机数。如果所有元素都被使用过,则重复旋转操作以生成新的随机数序列。

优点
1、MT19937生成的随机具非常好的随机性。
2、几乎所有语言都使用梅森旋转算法生成随机数,比如C++11、Python、PHP等。
3、MT19937的周期非常长,达到2^19937-1,这意味着在实际应用中几乎不可能遇到重复的随机数序列。
QQ截图20240816115200.png

易语言取高质量随机数-基于梅森旋转算法.zip (2.48 KB, 下载次数: 136, 售价: 3 枚 精币)

点评

小曾我要给你生猴子!   浙江省温州市  发表于 2024-8-16 13:00

评分

参与人数 30好评 +7 精币 +35 收起 理由
Yeyo + 1 + 2 YYDS~!
网络注册会员 + 1 + 1 感谢分享,很给力!~
vcx + 1 感谢分享,很给力!~
qiyuer + 1 感谢分享,很给力!~
聿聿 + 1 感谢分享,很给力!~
光影魔术 + 1 + 1 开源精神必须支持~
t176 + 1 感谢分享,很给力!~
huangdi9569 + 1 感谢分享,很给力!~
3266167 + 1 感谢分享,很给力!~
bear22 + 1 感谢分享,很给力!~
文西哥 + 1 感谢分享,很给力!~
booms + 1 感谢分享,很给力!~
望尘莫及 + 1 感谢分享,很给力!~
扶南 + 1 感谢分享,很给力!~
qweipuq + 1 感谢分享,很给力!~
风雨3137 + 1 感谢分享,很给力!~
ewake + 1 感谢分享,很给力!~
huangdi956 + 1 感谢分享,很给力!~
Zźh926 + 1 感谢分享,很给力!~
ican8 + 1 感谢分享,很给力!~
hackjoe + 1 感谢分享,很给力!~
jc520hll + 1 感谢分享,很给力!~
jing3 + 1 感谢分享,很给力!~
wuqingg + 1 + 1 支持开源~!感谢分享
xhping + 1 感谢分享,很给力!~
XXGL2005 + 1 感谢分享,很给力!~
pipi9 + 1 + 2 开源精神必须支持~
笨来无一悟 + 1 + 3 随机是不存在的 凡事总有促使它发生的原因 万事万物 因缘和合而生.
kyo9766 + 1 感谢分享,很给力!~
君子慎独 + 1 + 2 小曾我要给你生猴子!

查看全部评分


本帖被以下淘专辑推荐:

结帖率:67% (2/3)

签到天数: 9 天

发表于 2024-9-12 10:04:45 | 显示全部楼层   云南省昆明市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 2024-9-12 01:32:07 | 显示全部楼层   重庆市重庆市
        感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 21 天

发表于 2024-9-11 18:17:56 | 显示全部楼层   江西省赣州市
看看咋样~
回复 支持 反对

使用道具 举报

结帖率:83% (5/6)

签到天数: 20 天

发表于 2024-9-10 21:40:45 | 显示全部楼层   贵州省黔东南苗族侗族自治州
感谢分享!!!
回复 支持 反对

使用道具 举报

结帖率:40% (4/10)

签到天数: 10 天

发表于 2024-9-10 16:47:19 | 显示全部楼层   江苏省南京市
很好整好需要
回复 支持 反对

使用道具 举报

结帖率:78% (29/37)

签到天数: 17 天

发表于 2024-9-10 16:45:39 | 显示全部楼层   江西省抚州市
111111111111
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 5 天

发表于 2024-9-9 20:42:23 | 显示全部楼层   河南省焦作市
NBPLUS感谢感谢
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 14 天

发表于 2024-9-9 15:08:01 | 显示全部楼层   辽宁省沈阳市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 7 天

发表于 2024-9-9 13:23:29 | 显示全部楼层   浙江省杭州市
取高质量随机数
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表