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

时间:2017-01-11 07:10:53

标签: matlab floating-point rounding-error

我理解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

2 个答案:

答案 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的近似值产生的误差有关。