Matlab sin(pi)及其与机器epsilon的关系

我知道sin(pi)不等于零的原因是因为没有足够的位来存储“pi”的所有有效数字,但是这与机器epsilon有什么关系呢?

我在网上阅读了什么机器epsilon,但一小时阅读各种定义措辞不同,我感到困惑,并不理解epsilon的概念。 我最终因自己的愚蠢而变得非常沮丧......

下面这个例子是在MATLAB文档中给出的,我不理解它,有人可以向我解释这个例子试图展示什么吗?

找到从10.0到下一个最大的双精度数字的距离。

d = eps(10.0)

d =

   1.7764e-15

http://www.mathworks.com/help/matlab/ref/eps.html


机器epsilon有几个不同的定义,但是Matlab eps相当典型,是1.0和下一个最大双精度浮点数之间的差距。

事实上,我们可以使这个更一般的:对于任何浮点数2K之间≤ x <2K + 1之间的间隙x和下一个最大的浮点数为2k× eps (即eps(x)在Matlab)。 而且,任何实数与最接近的浮点数近似值之间的差距是其中的一半。

由于2≤π<4,这意味着pi (数值近似)和π(精确无理数)之间的差距受eps 。 实际上,它刚刚超过一半:

eps &大约 2.22×10-16

| pi - π| &约; 1.22×10-16

现在使用@ aka.nice答案的结果,并且sin(π)= 0,我们就得到了答案

sin( pi )= | sin( pi ) - sin(π)| &约; | pi - π| </ eps

即它也受eps限制。

注意: sin(pi) (数字结果)和sin( pi )(精确结果)之间也有一些轻微的四舍五入,但这是eps 2的顺序,所以在这种情况下可以忽略。


首先, sin(pi-epsilon)=epsilon+O(epsilon^3)

所以,如果我们有一个pi的近似值而不是pi(误差最高可达1/2个单位的最小精度),那么我们希望这个误差直接传递给正弦结果。

机器epsilon肯定与我们用pi的近似值所做的错误有关。

链接地址: http://www.djcxy.com/p/37929.html

上一篇: Matlab sin(pi) and its relation to machine epsilon

下一篇: Correctly sort nodes from newest to oldest