取高质量随机数基于梅森旋转算法易语言源码原理
MT19937算法利用线性反馈移位寄存器(LFSR)来产生随机数。LFSR的反馈函数是寄存器中某些位的简单异或操作,这些位也被称为抽头序列。为了使LFSR成为最大周期的LFSR,由抽头序列加上常数1形成的多项式必须是本原多项式。本原多项式是一种特殊的不可约多项式,能够确保LFSR通过所有内部状态,产生最大长度的伪随机序列!
MT19937算法过程
初始化阶段:生成一个具有624个元素的uint32数组(状态数组),这个数组是后续生成随机数的基础。
旋转算法阶段:对状态数组进行旋转操作,以产生新的随机数。这一步骤通过复杂的位操作和异或运算实现。
结果处理阶段:对旋转算法得到的结果进行进一步处理,如温度化,以提高随机数的质量。
具体实现
初始化:给定一个初始种子(seed),通过一系列的数学变换生成状态数组的624个元素。
旋转操作:对于状态数组中的每一个元素,通过特定的数学公式(涉及位移、异或等操作)计算新的值,并更新状态数组。
随机数生成:通过状态数组中的元素和特定的变换规则生成伪随机数。如果所有元素都被使用过,则重复旋转操作以生成新的随机数序列。
优点
1、MT19937生成的随机具非常好的随机性。
2、几乎所有语言都使用梅森旋转算法生成随机数,比如C++11、Python、PHP等。
3、MT19937的周期非常长,达到2^19937-1,这意味着在实际应用中几乎不可能遇到重复的随机数序列。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系贝贝进行处理。本站默认解压密码:www.hibbba.com
评论(0)