我理解sin(pi)
不等于零的原因是因为没有足够的位来存储" pi"的所有有效数字,但那是什么呢?与机器epsilon有关系吗?
我在线阅读机器epsilon是什么,但经过一个小时的阅读,各种不同的定义措辞不同,我感到困惑,并不理解epsilon的概念。我最终对自己的愚蠢感到非常沮丧......
以下示例在MATLAB文档中给出,我不理解,有人可以向我解释该示例试图显示的内容吗?
找到从10.0到下一个最大双精度数的距离。
d = eps(10.0) d = 1.7764e-15
答案 0 :(得分:2)
机器epsilon有几种不同的定义,但Matlab eps
是相当典型的,是1.0和下一个最大双精度浮点数之间的差距。
我们实际上可以使这更通用:对于2 k ≤x
之间的任何浮点数< 2 k + 1 ,x
与下一个最大浮点数之间的差距为2 k ×eps
(即eps(x)
在Matlab中)。此外,任何实数与其最近浮点近似之间的差距都是这个的一半。
因为2≤π<1。 4;,这意味着pi
(数值近似)和π(精确无理数)之间的差距由eps
限定。事实上,它只有一半以上:
eps
≈2.22×10 -16
| pi
- π| ≈1.22×10 -16
现在使用@ aka.nice回答的结果,并且sin(π)= 0,我们有
罪(pi
)= |罪(pi
) - 罪(π)| ≈| pi
- π| &LT; eps
即。它也受eps
限制。
注意:sin(pi)
(数字结果)和sin(pi
)之间也有一些轻微的舍入(确切的结果),但这是eps
的顺序2 ,在这种情况下可以忽略。
答案 1 :(得分:1)
首先,(y)::.....
因此,如果我们有pi的近似值而不是pi(误差高达1/2精度的单位),那么我们希望这个错误直接转移到正弦结果。
机器epsilon肯定与我们用pi的近似值产生的误差有关。