计算N很大的谐波序列(任意精度问题)

时间:2018-11-02 20:36:08

标签: julia precision arbitrary-precision

这是我提出的a previous one的后续问题。

我试图将谐波序列计算得非常大,但是与log(n)+γ进行比较时,我没有得到预期的误差。

我怀疑主要问题在于BigFloat茱莉亚类型。

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。

1 个答案:

答案 0 :(得分:5)

您必须确保在所有地方都使用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

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

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