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))

returns 7.2395....e-10,与Mathematica返回的实际响应相差甚远,即-5.11...e-20.

如何使总和准确?我手动检查了 Ui 并且所有的数字看起来都非常准确。

编辑

这是计算相同总和的 Mathematica 代码。它适用于整数,只有在总和结束后才转换为实数。我增加了报告的小数位数。

这是什么原因?

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

您需要在整个计算过程中使用 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