Adr*_*ian 1 precision arbitrary-precision julia
这是我前一个问题的后续问题.
我正在尝试将Harmonic系列计算为非常大的项,但是当与log(n)+γ进行比较时,我没有得到预期的误差.
我怀疑主要问题是BigFloatjulia类型.
harmonic_bf = function(n::Int64)
x=BigFloat(0)
for i in n:-1:1
x += BigFloat(1/i)
end
x
end
Run Code Online (Sandbox Code Playgroud)
例如,众所周知,公式的下限: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
Run Code Online (Sandbox Code Playgroud)
它让我疯狂,我似乎无法理解缺少的东西...... 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
Run Code Online (Sandbox Code Playgroud)
然后在测试中(通知BigFloat下log):
julia> harmonic_bf(n)-log(BigFloat(n))-? > lower_bound(BigFloat(n))
true
Run Code Online (Sandbox Code Playgroud)