计算非常大的 N 的调和级数(任意精度问题)

Computing harmonic series for very large N (arbitrary precision problems)

这是我提出的 的后续问题。

我正在尝试将调和级数计算为非常大的项,但是与 log(n)+γ 进行比较时,我没有得到预期的错误。

我怀疑主要问题出在 BigFloat julia 类型上。

harmonic_bf = function(n::Int64)
    x=BigFloat(0)
    for i in n:-1:1
        x += BigFloat(1/i)
    end
    x
end

例如,众所周知,公式的下限:H_n - log(n) - γ 是 1/2/(n+1)。 然而,这适用于 n=10^7 然后失败 n=10^8.

n=10^8
γ = big"0.57721566490153286060651209008240243104215933593992"
lower_bound(n) = 1/2/(n+1)

>>> harmonic_bf(n)-log(n)-γ > lower_bound(BigFloat(n))
false

快把我逼疯了,我似乎不明白缺少了什么...BigFloat 理应解决算术精度问题,但事实似乎并非如此。

注意:我尝试使用未设置精度和 256 位精度的 BigFloat。

您必须确保在任何地方都使用 BigFloat。首先在你的函数中(注意 BigFloat(1/n)1/BigFloat(i) 不同):

function harmonic_bf(n::Int64)
    x=BigFloat(0)
    for i in n:-1:1
        x += 1/BigFloat(i)
    end
    x
end

然后在测试中(注意log下的BigFloat):

julia> harmonic_bf(n)-log(BigFloat(n))-γ > lower_bound(BigFloat(n))
true