在实际概率中,从区间p
中的所有实数中选择的随机数(0,1)
将为0.5
的概率为0%。但是,
rand == 0.5
在MATLAB中?我想这就像在询问有多少双精度数字在0和1之间,或者可能还有其他因素在起作用。
答案 0 :(得分:1)
没有关于MATLAB生成器的具体信息......
一般来说,即使是简单的pseudo-random generators也有足够长的周期,可以覆盖所有可以表示为double的值。
如果MATLAB使用其他形式生成随机数,那就更好了 - 所以假设它统一涵盖了整个范围的双值。
我相信概率可能是:您感兴趣的值周围的可表示数字之间的距离除以间隔的长度。有关距离的讨论,请参阅What is the minimal step in double data type? (.NET)。
答案 1 :(得分:1)
看this question,我们看到有2 62 - 2 52 在区间(0 1)中加倍。因此,挑选任何一个(如0.5)的概率大致等于除以该数字的概率,或
>> p = 1/(2^62-2^52)
ans =
2.170523997312134e-019
但是,正如horchler已经指出的那样,它还取决于您使用的随机数生成器的类型,以及MATLAB的实现。遗憾的是,我只掌握了每个实现细节的基本知识,但是您可以查看here以获取MATLAB中可用随机数生成器的列表,并进一步查看更精确的数字。
答案 2 :(得分:0)
我不确定阿列克谢是否试图这么说,但是受到他的启发我认为概率确实大约是0.5左右的数字之间的距离。
因此我预计概率大约为:
eps(0.5)
评估为1.1102e-16
鉴于双数之间差异的单调性,我实际上认为这有:
eps(0.5-eps(0.5)) <= yourprobability <= eps(0.5)
暗示范围为5.5511e-17至1.1102e-16