谐波序列的单点精度

SIngle point precsion for harmonic sequence

我想了解如何从理论上找到调和序列求和的单精度。例如,我有一个粗略的想法,总和是 ln(k),我认为 k 是迭代步骤吗?机器 epsilion 是 2^-23。但是我得到 N> 2^-18,但是我在 matlab 之后得到的步骤是 2097153。有人帮忙吗?非常感谢

我们来看这个简单的代码:

s=single(0);
ix=1;
while(true)
    s_new=s+1/ix;
    if s_new==s
        break
    end
    s=s_new;
    ix=ix+1;
end

ix=2097152结束,问题是为什么?

您可以添加到 s_new 而不会更改该值的最大值是 eps(s_new)/2,因此我们正在寻找 1/ix==eps(s_new)/2 所在的点。如果将 s_new 替换为已知的近似值 log(ix+1),您最终会得到 1/ix==eps(single(log(ix+1)))/2,这对于使用代码评估的 ix 是正确的:

>> f=@(x)(vpa(eps(single(log(x+1))))/2)-(1/vpa(x));
>> f(ix)

ans =

0.0

>> f(ix+1)

ans =

0.00000000000022737356702306650969194903757618

>> f(ix-1)

ans =

-0.00000000000022737378386350100684213964564307