Bel*_*gor 7 floating-point matlab rounding-error
我理解为什么sin(pi)不等于零的原因是因为没有足够的位来存储"pi"的所有有效数字,但这与机器epsilon有什么关系?
我在网上读到了什么机器epsilon,但经过一个小时的阅读,各种不同的定义措辞不同,我感到困惑,并不理解epsilon的概念.我最终对自己的愚蠢感到非常沮丧......
以下示例在MATLAB文档中给出,我不明白,有人可以向我解释该示例试图显示的内容吗?
找到从10.0到下一个最大双精度数的距离.
Run Code Online (Sandbox Code Playgroud)d = eps(10.0) d = 1.7764e-15
机器 epsilon 有几种不同的定义,但Matlabeps是相当典型的,它是 1.0 和下一个最大双精度浮点数之间的差距。
我们实际上可以使这个更普遍:对于 2 k ≤ x< 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阶的,因此在这种情况下可以忽略。