一个随机生成的浮点数在特定范围内的概率

5
假设我随机生成一个数字并检查它是否在某个范围内。对于整数而言,这很简单。例如,使用无符号8位,生成的随机数可以在范围(0-5,包括0和5)内,并且概率为(6/2^8)。
我的问题是如何计算浮点数的相同情况。例如,当我只随机生成32位时,数字在-10.0和10.0的范围内的概率是多少?

“(a - b)/(MAX - MIN)”有什么问题?(其中,a和b是您的区间端点,MAX和MIN是可能生成的最大/最小数字) - arshajii
@arshajii:因为它是浮点数,所以数字分布的密度不均匀。 - prosseek
好的,我明白了;谢谢你的澄清。 - arshajii
这可能会有所帮助 - 高周期随机数到浮点数的转换 - Gilbert Le Blanc
为了增加乐趣,一些32位模式不是IEEE 754数字——它们是非数值的值;要么是+inf,要么是-inf,要么是NaN。有很多NaN模式。 - Robert Dodier
1
作为第一次近似,这些数字将会呈对数分布。 - Hot Licks
2个回答

3
假设使用二进制表示,可以计算出区间[2^n,2^n+1)的概率。例如,如果指数占用11位,则考虑符号后,概率为1/2^12。
在这样的区间内,可以考虑浮点数的均匀密度。
然后,您可以尝试将您的区间分解为这些2的幂边界。然后计算每个区间的概率并将它们全部相加……假设存在一种类似于IEEE-754的非规格化表示,对于最小可能的指数e,区间为[0,2^e[。因此,这应该给您一个相当简单的过程,但我没有看到简单的公式。
对于非常准确的概率,您需要处理在区间内最接近可表示浮点数的有效位模式的下限和上限。

0

看起来你应该能够通过查看10.0的IEEE 754表示(编辑:或任何感兴趣的值)来取得进展 - 比其大小更小的浮点数具有较小的指数,或者相同的指数和较小的尾数。我猜你可以算出指数和尾数可能的值的数量,然后从那里开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接