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