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

Matlab sin(pi) and its relation to machine epsilon

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

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

下面这个例子是在 MATLAB 文档中给出的,我不明白,谁能给我解释一下这个例子想表达什么?

Find the distance from 10.0 to the next largest double-precision number.

d = eps(10.0)

d =

   1.7764e-15

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

第一次下单,sin(pi-epsilon)=epsilon+O(epsilon^3)

所以,如果我们有一个 pi 的近似值而不是 pi(误差高达 1/2 最小精度单位),那么我们希望这个误差直接转移到正弦结果。

机器epsilon肯定与我们用pi的近似值产生的误差有关。

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

我们实际上可以使这个更通用:对于 2kx < 2k+1[=52 之间的任何浮点数=],x和下一个最大的浮点数之间的差距是2k×eps(即Matlab中的eps(x))。而且,任何实数与其最近的浮点数近似值之间的差距是这个数的一半。

因为 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,所以在这种情况下可以忽略。