从random()获得0.0的概率?

问题描述 投票:1回答:2

我正在尝试制作一个简单的程序来演示一些东西,尽管我对其数学有些困惑。

from random import random
a = random()

我阅读了随机函数,其分布为[0.0; 1.0)。它使用Mersenne Twister生成伪随机数,它是56位精度的浮点数。

我假设这意味着它精确生成0.0的概率是1/2 ^ 56?

为了使概率为1/2 ^ 28,必须低于什么?..我试图理解56位浮点转换,但似乎无法弄清楚。实际的浮动值必须是多少?

a = ?
if random() < a:
  print("Success")
python random floating-point probability-density
2个回答
2
投票

[在[0,1]上具有连续的均匀分布,小于x的样本部分为x。例如,½个样本小于½。因此,使样本小于x的概率为1/2 [28]的x为1/2 [28]。]在[0,1上有一个量化的分布(分布中只有某个量子的倍数),如果x是分布中的数字,则同样如此。如果它在分布的两个数字之间,则样本小于x的概率就是刚刚大于x的数字。但是,在您描述的情况下,似乎1/2 28在分布中,因此是答案。

取决于它是如何生成的。几乎所有库都使用等距方法来生成[0,1)的值。简要地:

生成统一整数(例如,每次调用返回64位)

    丢弃多余的位数以匹配浮点精度(单精度为24,双精度为53)
  • 将整数转换为浮点数(因为值“适合”,所以不进行舍入)并缩放到范围(2 ^ -24 / 2 ^ -53)
  • 因此(加倍)该方法产生2 ^ 53个唯一FP值,并且每个出现的概率为2 ^ -53。基础整数生成器的位数不影响此。

  • 0
    投票

    生成统一整数(例如,每次调用返回64位)

    © www.soinside.com 2019 - 2024. All rights reserved.