我必须计算正确解码位复制n次数的概率.以下公式应该是答案:

在Haskell中,我将其编码如下:
fac 1 = 1
fac n = fac (n-1) * n
--prob :: (Integral b, Fractional b) => (b, b) -> b
--prob :: (Int,Int) -> Double
prob (n, k)
| n==k = (0.01**k)
| otherwise = factor (n, k) * (0.01 ** k) * (0.99**(n-k)) + prob (n, (k+1))
where
factor (n, k) = (fac n / ((fac k)* (fac n-k)))
Run Code Online (Sandbox Code Playgroud)
1 - prob (3,2)给出结果0.99992575,这是不正确的,应该是0.99970.有谁知道我哪里出错了?
小智 6
原因是功能优先.如果你看一下prob的定义,你会看到:
(fac n-k)
Run Code Online (Sandbox Code Playgroud)
因为函数应用程序具有最优先级,因此将其解析为
((fac n) - k)
Run Code Online (Sandbox Code Playgroud)
所以你的代码应该是
(fac (n-k))
Run Code Online (Sandbox Code Playgroud)
在我的电脑上得到0.999702的结果.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |