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

Bel*_*gor 7 floating-point matlab rounding-error

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

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

以下示例在MATLAB文档中给出,我不明白,有人可以向我解释该示例试图显示的内容吗?

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

d = eps(10.0)

d =

   1.7764e-15
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*rne 1

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

我们实际上可以使这个更普遍:对于 2 kx< 2 k+1之间的任何浮点数,x与下一个最大浮点数之间的差距是 2 k × eps(即eps(x)在 Matlab 中)。此外,任何实数与其最接近的浮点近似值之间的差距都是这个数的一半。

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

eps约2.22×10 -16

| pi- π| 约1.22×10 -16

现在使用 @aka.nice 答案的结果,以及 sin(π) = 0,我们有

罪 ( pi) = | sin( pi) - sin(π) | ≈ | pi- π| <eps

即它也受 限制eps

sin(pi)注意:(数值结果)和 sin( pi) (精确结果)之间也有一些轻微的舍入,但这是eps2阶的,因此在这种情况下可以忽略。