首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mt19937如何准确地用于python随机模块函数?

mt19937如何准确地用于python随机模块函数?
EN

Stack Overflow用户
提问于 2020-05-24 01:37:04
回答 1查看 500关注 0票数 1
代码语言:javascript
复制
from random import *
seed(5489)
hex(getrandbits(32)) # '0xc9a0e034'
hex(getrandbits(32)) # '0x38feb21f'

我在Python3.8.2中运行了这个程序(并不是说它太重要了)。这不是我所期望的MT19937 32位PRNG。确切地说,我期望的值类似于这个网站:https://create.stephan-brumme.com/mersenne-twister/中的值。

Python与其他语言有什么不同?有没有一种方法可以复制Python自己生成的位呢?(另外,从0到1,从32位字大小的整数生成的随机()浮点数是如何产生的?)

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-24 01:54:44

Python的种子算法与链接使用的算法完全不同。Twister有一个巨大的状态,一个只有32位的种子只能使它进入一个相对微不足道的可能状态。Python的种子算法使用任意大的参数。

要复制Python的种子算法,您必须阅读C代码并自己进行仿真。关于它的任何定义都没有。

Python生成IEEE双的代码与Twister原始C代码中的genrand_res53()函数相同:

代码语言:javascript
复制
uint32_t a=genrand_uint32(self)>>5, b=genrand_uint32(self)>>6;
return PyFloat_FromDouble((a*67108864.0+b)*(1.0/9007199254740992.0));

实际上,32位Twister输出的前27位左移到26位,“next”32位Twister输出的前26位填充下26位,给出一个53位值除以2.0**53。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61980620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档