提问人:Denis Cousineau 提问时间:11/29/2021 最后编辑:Denis Cousineau 更新时间:11/30/2021 访问量:129
与 R 的高精度求和,涉及二项式系数和对数
High precision sum with R involving binomial coefficients and logs
问:
我试图从二项式系数(非常大的整数)和对数(小实数)的乘积中获得项的总和,每个项都有交替的符号。
例如:
library(Rmpfr)
binom <- function(n,i) {factorial(n)/(factorial(n-i)*factorial(i))}
i <- 30
n <-60
Ui <- rep(0,i)
for (k in (0:(i-1))) {
Ui[k+1] <- (-1)^(i-1-k) * binom(i-1,k)/(n-k) * log(n-k)
}
U <- sum(mpfr(Ui, 1024))
返回值,这与 Mathematica 返回的实际响应相差甚远,即 。7.2395....e-10
-5.11...e-20
我怎样才能使总和准确?我手动检查了 Ui,所有单独似乎都精确到许多位数。
编辑
这是计算相同总和的 Mathematica 代码.它适用于整数,只有在总和结束后才转换为实数。我增加了报告的小数点数量。
这是为什么?
最后,我需要得到通过类似计算获得的两个数字的比率。当这两个数字相差几个数量级时,获得的比率简直是不可预测的。
答:
2赞
jblood94
11/30/2021
#1
您需要在整个计算过程中使用对象,而不仅仅是求和:mpfr
library(Rmpfr)
i <- 30
n <- 60
k <- 0:(i - 1)
nk <- mpfr(n - k, 128)
(U <- sum((-1)^(i-1-k)*choose(i-1,k)/(nk)*log(nk)))
#> 1 'mpfr' number of precision 128 bits
#> [1] -5.110333215290518581300810256453669394729e-20
nk <- mpfr(n - k, 256)
(U <- sum((-1)^(i-1-k)*choose(i-1,k)/(nk)*log(nk)))
#> 1 'mpfr' number of precision 256 bits
#> [1] -5.110333215285320173235309727002720346864555872897902728222060861935229197560667e-20
nk <- mpfr(n - k, 512)
(U <- sum((-1)^(i-1-k)*choose(i-1,k)/(nk)*log(nk)))
#> 1 'mpfr' number of precision 512 bits
#> [1] -5.1103332152853201732353097270027203468645558728979134452318939958128833820370490135678222208577277855238767473116630391351888405531035522832949562601913591e-20
评论
0赞
Denis Cousineau
12/1/2021
有意义!非常感谢@jblood94。
评论
choose()
binom()