我习惯于在半开区间[0,1]中返回浮点值的伪随机数生成器。
我已经看到一些可以在闭区间[0,1]上返回值的RNG的引用,例如this implementation of the Mersenne Twister
由于数学原因,我可以看到为什么要排除一个或两个端点的原因,例如:
exponentially_distributed=-logf( 1.0-rng() )
0.0<=rng()<1.0
,始终会产生有效数字。
但我想不出这样一种情况,即用产生[0,1)的产生[0,1]取代产生[0,1]会产生任何实际差异。
在什么情况下使用浮点伪随机数生成器 在闭合区间[0,1]上返回绝对必要的值?
答案 0 :(得分:2)
也许你是在随机生成事件发生的概率?如果允许0,则必须允许1.
答案 1 :(得分:1)
不能,弄清楚何时关闭的间隔会有用,但开放的间隔似乎是唯一合理的使用方式。
让我们抛硬币:
如果你说rnd() < 0.5
是头部,其余部分是尾部,那么如果使用闭合间隔,你将获得比头部更多的尾巴。多少尾巴取决于实际获得1的可能性。
答案 2 :(得分:0)
使用半开间隔的一个令人信服的理由是您为某个数组选择随机数组索引的用例。当你从[0,1]中的[0,1]扩展为整数时,永远不会得到值arrayLength,因为在许多语言实现中,它不是数组中的索引。例如,Java和ArrayIndexOutOfBoundsException。半开的间隔在这里非常方便。
具有闭区间[0,1]的原因是Albin的概率论证。但值得注意的是,从数学上讲,在[0,1]中选择任何特定随机数(包括1)的概率为零。但是,对于伪随机数生成器,它偶尔会弹出。