仅使用多头计算迭代概率
Calculating iterative probability using only longs
我正在尝试仅使用多头来计算迭代概率。换句话说,我知道我可以用 P(x) = 1-(1-p)^x 的封闭形式计算这个概率,其中 p 是每次出现的概率,x 是出现的次数。但是我不能使用浮点数,所以我不能只是迭代乘法。
该函数将取 x(出现次数)。它将可以访问 p 的分子和分母的全局变量(例如 d = 100,000,000 和 n1 = 500,000,p 为 1/200)。然后它将 return 一个 long , n2, 其中 P(iterative) = n2 / d.
我知道 n2 最终会接近 d,但就我的目的而言,它不应该真的接近那么近。我只是希望能够做到这一点而不会冒溢出的风险并且只能访问 64 位寄存器。
如果参数值没有限制,这是不可能的。
例如,p=99/100,x=10,64位整数的比值无法表示结果。
即使比率可行,您也可能会发现准确性严重下降。
如果您对分母 d = 100,000,000 的精度没有问题,那么有理数算术将实现您想要的结果。计算中的中间结果可能需要超过 64 位,但最后,您会将最终结果四舍五入为 64 位的分子和分母。
我正在尝试仅使用多头来计算迭代概率。换句话说,我知道我可以用 P(x) = 1-(1-p)^x 的封闭形式计算这个概率,其中 p 是每次出现的概率,x 是出现的次数。但是我不能使用浮点数,所以我不能只是迭代乘法。
该函数将取 x(出现次数)。它将可以访问 p 的分子和分母的全局变量(例如 d = 100,000,000 和 n1 = 500,000,p 为 1/200)。然后它将 return 一个 long , n2, 其中 P(iterative) = n2 / d.
我知道 n2 最终会接近 d,但就我的目的而言,它不应该真的接近那么近。我只是希望能够做到这一点而不会冒溢出的风险并且只能访问 64 位寄存器。
如果参数值没有限制,这是不可能的。
例如,p=99/100,x=10,64位整数的比值无法表示结果。
即使比率可行,您也可能会发现准确性严重下降。
如果您对分母 d = 100,000,000 的精度没有问题,那么有理数算术将实现您想要的结果。计算中的中间结果可能需要超过 64 位,但最后,您会将最终结果四舍五入为 64 位的分子和分母。