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

标签 matlab floating-point rounding-error

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

最佳答案

机器 epsilon 有几个不同的定义,但是 Matlab eps非常典型,是 1.0 和下一个最大的 double float 之间的差距。

我们实际上可以更一般化:对于 2kx < 2k+1 之间的任何 float ,间隙x 和下一个最大的 float 之间是 2k × eps (即 Matlab 中的 eps(x) ).此外,任何实数与其最接近的 float 近似值之间的差距是这个数的一半。

因为 2 ≤ π < 4;,这意味着 pi(数值近似值)和 π(精确的无理数)之间的差距以 eps 为界。事实上,它刚刚超过一半:

eps ≈ 2.22 × 10-16

|pi - π| ≈ 1.22 × 10-16

现在使用@aka.nice 答案的结果,并且 sin(π) = 0,我们得到了

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

即它也受 eps 的限制。

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

关于Matlab sin(pi) 及其与机器 epsilon 的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41584752/

相关文章:

python - 生成 0.1 到 1.0 之间的随机数。 Python

javascript - 有没有办法在 Javascript 中 chop 科学记数法?

c# - 如何将无限重复的数字处理为小数?

matlab - 在命令行窗口中显示代码,如 Matlab 中的 'help'

matlab - 从盈透证券获取 future 合约列表

haskell - 分数类型比较

math - x86上三角指令的误差是多少?

algorithm - 识别规则网格中的扭曲

c# - 如何在C#中实现MATLAB 'tansig'双曲正切sigmoid传递函数

c++ - 从 double 转换为 float 时检测精度损失