首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么random.random()使用两个random.randint()值?

为什么random.random()使用两个random.randint()值?
EN

Stack Overflow用户
提问于 2018-02-12 04:15:12
回答 1查看 1.2K关注 0票数 6

我开发了一个简单的应用程序来生成测试数据系列,我构建它是为了能够使用随机种子进行重复。我注意到以下情况,并想知道为什么会发生这种情况:

代码语言:javascript
复制
>>> random.seed(1)
>>> [random.randint(0,10) for _ in range(0,10)]
[2, 9, 1, 4, 1, 7, 7, 7, 10, 6]
>>> random.seed(1)
>>> random.random()
0.13436424411240122
>>> [random.randint(0,10) for _ in range(0,10)]
[1, 4, 1, 7, 7, 7, 10, 6, 3, 1]

请注意,对random()的单个调用是如何使用randint()的两个值的。我猜想这与在给定范围内生成浮点和int所需的随机信息量有关,但是有什么方法可以跟踪“到目前为止使用了多少个随机值吗?”,即系统的半随机值序列有多远?

最后,我编写了自己的函数,总是在逻辑中使用对random.random()的单个调用。所以我不是要一个解决方案,只是一些背景/解释。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 05:11:19

您的猜测是准确的,至少对于最新版本的CPython。在随机模块的代码中有几个相关的地方,您可以看到为什么会发生这种情况。我认为所有这些都是实现细节,但您可以看到,从本质上讲,需要生成32位随机位的组才能获得随机数。因此,获得53个随机比特(表示双倍的分数部分)使用的随机比特是获得4个随机比特的两倍。

关于能够判断已经生成了多少随机数据,提供的函数似乎不能给您提供一种简单可靠的方法。

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

https://stackoverflow.com/questions/48739457

复制
相关文章

相似问题

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