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
第一次下单,sin(pi-epsilon)=epsilon+O(epsilon^3)
所以,如果我们有一个 pi 的近似值而不是 pi(误差高达 1/2 最小精度单位),那么我们希望这个误差直接转移到正弦结果。
机器epsilon肯定与我们用pi的近似值产生的误差有关。
机器 epsilon 有几个不同的定义,但 Matlab eps
是相当典型的,它是 1.0 和下一个最大的双精度浮点数之间的差距。
我们实际上可以使这个更通用:对于 2k ≤ x
< 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
)(确切结果)之间也有一些轻微的舍入,但这是顺序 eps
2,所以在这种情况下可以忽略。
我理解为什么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
第一次下单,sin(pi-epsilon)=epsilon+O(epsilon^3)
所以,如果我们有一个 pi 的近似值而不是 pi(误差高达 1/2 最小精度单位),那么我们希望这个误差直接转移到正弦结果。
机器epsilon肯定与我们用pi的近似值产生的误差有关。
机器 epsilon 有几个不同的定义,但 Matlab eps
是相当典型的,它是 1.0 和下一个最大的双精度浮点数之间的差距。
我们实际上可以使这个更通用:对于 2k ≤ x
< 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
)(确切结果)之间也有一些轻微的舍入,但这是顺序 eps
2,所以在这种情况下可以忽略。