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

Julia 计算超大N(任意精度问题)的调和级数,julia,precision,arbitrary-precision,Julia,Precision,Arbitrary Precision,这是我提出的后续问题 我试图用非常大的项来计算调和级数,但是当与log(n)+γ比较时,我没有得到预期的误差 我怀疑主要问题在于BigFloatjulia类型 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,则保持不

这是我提出的后续问题

我试图用非常大的项来计算调和级数,但是当与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
Supossly应该解决算术精度问题,但事实似乎并非如此


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

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

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


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

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


旁注:写函数谐波(n::Int)。。。结束以定义函数。您正在做的是定义一个包含函数对象的变量(看起来像R)。。。结束以定义函数。您正在做的是定义一个包含函数对象的变量(看起来像R)。太棒了!我承认在日志中不使用BigFloat是毫无意义的,但是我更感兴趣的是
BigFloat(1/I)
1/BigFloat(I)
。看看
BigFloat(1/10^10)
1/BigFloat(10^10)
之间的区别。太棒了!我承认在日志中不使用BigFloat是毫无意义的,但是我更感兴趣的是
BigFloat(1/I)
1/BigFloat(I)
。查看
BigFloat(1/10^10)
1/BigFloat(10^10)
之间的区别。
function harmonic_bf(n::Int64)
    x=BigFloat(0)
    for i in n:-1:1
        x += 1/BigFloat(i)
    end
    x
end
julia> harmonic_bf(n)-log(BigFloat(n))-γ > lower_bound(BigFloat(n))
true