与 R 的高精度求和,涉及二项式系数和对数

High precision sum with R involving binomial coefficients and logs

提问人:Denis Cousineau 提问时间:11/29/2021 最后编辑:Denis Cousineau 更新时间:11/30/2021 访问量:129

问:

我试图从二项式系数(非常大的整数)和对数(小实数)的乘积中获得项的总和,每个项都有交替的符号。

例如:

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 代码.它适用于整数,只有在总和结束后才转换为实数。我增加了报告的小数点数量。

Mathematica code

这是为什么?

最后,我需要得到通过类似计算获得的两个数字的比率。当这两个数字相差几个数量级时,获得的比率简直是不可预测的。

r 精度 数二 项式系数

评论

0赞 Ben Bolker 11/29/2021
首先使用内置的表达式代替表达式,看看它是否有帮助。choose()binom()
0赞 Denis Cousineau 11/29/2021
@BenBolker:不!
1赞 Ben Bolker 11/29/2021
是的,我认为这可能是一个挑战。(1) 您是否 100% 确定您在这里实现的内容和您在 Mathematica 中要求的内容之间没有错误/差异?(2)我尝试了一些东西(在计算中以不同的方式对术语进行排序/分组),但到目前为止没有运气
1赞 Ben Bolker 11/29/2021
你能出示你的 Mathematica 代码吗?
0赞 Denis Cousineau 11/30/2021
@BenBolker我在编辑中添加了 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。