1

我习惯于在半开区间 [0,1) 中返回浮点值的伪随机数生成器。

我已经看到一些对 RNG 的引用,它们可以在闭合区间 [0,1] 上返回值,例如Mersenne Twister 的这个实现

我可以看到您出于数学原因想要排除一个或两个端点的原因,例如

exponentially_distributed=-logf( 1.0-rng() )

如果 总是产生一个有效的数字0.0<=rng()<1.0

但我想不出用产生 [0,1) 的 rng 替换产生 [0,1] 的 rng 会产生任何实际差异的情况。

在什么情况下,绝对有必要在闭区间 [0,1] 上返回值的浮点伪随机数生成器?

4

3 回答 3

2

也许如果您随机生成事件发生的概率?如果允许 0,则必须允许 1。

于 2013-02-28T18:54:37.447 回答
1

不能,弄清楚封闭区间何时有用,但开放结束区间似乎是唯一合理的使用方式。

让我们抛硬币:

如果你说rnd() < 0.5是头,其余的是尾,如果你使用闭区间,你会得到比头更多的尾。还有多少尾巴取决于实际得到 1 的可能性。

于 2013-02-28T19:01:40.223 回答
0

使用半开区间的一个令人信服的理由是您为某个数组选择随机数组索引的用例。当您从 [0, 1) 缩放到 [0, arrayLength] 中的整数时,永远不要获取值 arrayLength 很有帮助,因为在许多语言实现中这不是数组中的索引。例如,Java 和 ArrayIndexOutOfBoundsException。半开区间在这里非常方便。

具有闭区间 [0, 1] 的原因是 Albin 的概率论点。但值得注意的是,从数学上讲,在 [0, 1] 中选择任何特定随机数(包括 1)的概率为零。但是,对于伪随机数生成器,它会偶尔弹出。

于 2013-02-28T19:10:01.000 回答