这是我提出的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。
答案 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