|
分享源码
界面截图: |
- |
是否带模块: |
纯源码 |
备注说明: |
- |
本帖最后由 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,这意味着在实际应用中几乎不可能遇到重复的随机数序列。
易语言取高质量随机数-基于梅森旋转算法.zip
(2.48 KB, 下载次数: 178, 售价: 3 枚 精币)
|
评分
-
查看全部评分
|