生成特定随机数的概率,如在MATLAB中

生成特定随机数的概率,如在MATLAB中,matlab,random,probability,Matlab,Random,Probability,在实概率中,从区间(0,1)中的所有实数中选择的随机数p将0.5的概率为0%。然而,发生这种情况的可能性有多大 rand == 0.5 在MATLAB中?我想这就像问有多少双精度数字在0和1之间,或者可能还有其他因素在起作用。没有关于MATLAB生成器的特定信息 一般来说,即使是简单的,也有足够长的周期,可以覆盖由double表示的所有值 如果MATLAB使用其他形式的随机数生成方法,它会更好——因此假设它均匀地覆盖整个双值范围 我相信概率是:你们感兴趣的值周围的可表示数字之间的距离除以间隔的

在实概率中,从区间
(0,1)
中的所有实数中选择的随机数
p
0.5
的概率为0%。然而,发生这种情况的可能性有多大

rand == 0.5

在MATLAB中?我想这就像问有多少双精度数字在0和1之间,或者可能还有其他因素在起作用。

没有关于MATLAB生成器的特定信息

一般来说,即使是简单的,也有足够长的周期,可以覆盖由double表示的所有值

如果MATLAB使用其他形式的随机数生成方法,它会更好——因此假设它均匀地覆盖整个双值范围

我相信概率是:你们感兴趣的值周围的可表示数字之间的距离除以间隔的长度。有关距离的讨论,请参见。

查看,我们看到有262-252个 在间隔(0-1)中加倍。因此,选择任何一个(如0.5)的概率大致等于1除以该数字,或

>> p = 1/(2^62-2^52) 
ans =
    2.170523997312134e-019

然而,正如horchler已经指出的,它还取决于您使用的随机数生成器的类型,以及MATLAB的实现。遗憾的是,我对每种方法的实现细节只有基本的了解,但是你可以在MATLAB和google中进一步查找可用的随机数生成器列表,以获得更精确的数字。

我不确定Alexei是否试图这么说,但受他的启发,我认为概率实际上大约是0.5左右的数字之间的距离

因此,我预计概率约为:

eps(0.5) 
计算结果为1.1102e-16


考虑到两个数字之间的差异是单调的,我认为这是正确的:

eps(0.5-eps(0.5)) <= yourprobability  <= eps(0.5) 

eps(0.5-eps(0.5))见:。但是,如果我没记错的话,Mersenne Twister算法是基于[1,2]计算的,然后移位。我可能错了(很久以前就不记得了),但我相信
p
等于0.5的概率实际上是未定义的,而不是0。当定义不可数集(如实区间)上的分布时,定义的唯一概率是当
p
是区间的某个子集
s
的成员时,其中
s
必须有一个(Lebesgue?)度量值大于零。很抱歉,这并不能直接回答您关于双精度的主要问题,但在这样的背景下思考可能会有所帮助。@SamRoberts:这个的正确术语是“,”通常缩写为a.s.@SamRoberts:好吧,@horchler现在它开始回来了-谢谢你,我将乐于提醒自己什么是sigma代数!注意,0到1之间的大多数点将更接近于0而不是1,因此我猜你的估计更接近于下限。@DennisJaheruddin:这是真的……Mersienne扭曲了吗呃,从(0,1)中以相等的概率选择任何
,或者从任何
数字
?如果第一种情况是这样,我的答案是正确的。但我确实希望第二种情况是算法的目标,因此,您必须查看两个独立的间隔
(0,X)
(X,1)
(在这种情况下
X=0.5
)然后重做数字。