如何计算四舍五入到整数的随机值的预期平均值?

时间:2017-06-18 12:26:49

标签: math random language-agnostic

例如,请考虑以下伪代码:

round(random(0.3, 1.9))

使用舍入到最接近的整数并随机生成0.3到1.9之间的均匀浮点数,一百万个样本的平均值大约为1.125,而不是1.1的天真平均值。< / p>

如何在不实际生成数千个数字的情况下通过算法推导出这个数字?

希望这不是一个小问题,但我似乎无法找到一个简单的解决方案。

2 个答案:

答案 0 :(得分:2)

这是一个相当普遍的解决方案:

首先请注意,由于(a,b)的分布与round(X)的分布相同,因此问题可以减少到计算floor(Y)范围内随机数的最低值的预期值的问题。 Y = X + 0.5 Y U(a+0.5,b+0.5) X U(a,b) a bA = floor(a) B = floor(b) pA = (A + 1 - a)/(b-a) pB = (b-B)/(b-a) 降低到最低限度的优势在于我们不需要根据每个向上或向下舍入的pAA进入案例。

让:

pB

BA的概率,B[A+1,B-1]的概率。如果floor(X)A以外的整数是可能的,那么它们将在B区间内均匀分布。 (A+B)/2的预期值,因为它既不是E(floor(X)) = pA*A + pB*B + (1-pA-pB)*(A+B)/2 也不是(a,b),因此pA。这种条件期望需要通过这种值发生的概率加权。把这一切放在一起我们有:

pB

有一些细微之处。上述参数隐含地假设A = B = (A+B)/2包含至少1个整数。如果它没有,则<-efloor <- function(a,b){ A <- floor(a) B <- floor(b) pA <- (A+1-a)/(b-a) pB <- (b-B)/(b-a) pA*A + pB*B + (1-pA-pB)*(A+B)/2 } eround <- function(a,b){ efloor(a+0.5,b+0.5) } 的计算不正确,但在这种情况下> eround(0.3,1.9) [1] 1.125 并且上述公式仍然正确地将其返回为预期值。

以下是R实现。第一个函数实现上面的公式,第二个函数显示如何减少舍入问题。如果您不了解R,template是赋值运算符,函数定义中的最后一个表达式是返回值。

templateUrl

例如,

template

答案 1 :(得分:0)

[0.3,0.5)上,您获得值0[0.5,1.5)1[1.5,1.9)2。由于随机数是均匀的,它们的概率与区间长度成正比,全长为1.9-0.3=1.6。因此,理论平均值是

0.2/1.6*0 + 1.0/1.6*1 + 0.4/1.6 * 2 = 1.8/1.6 = 1.125.