eps 返回从 1.0 到下一个最大双精度数的距离,所以我可以用它来解释负权重位置上的数字值。但是对于具有高正权重位置的非常大的数字,我可以用什么来解释?
我的意思是我需要一些参考来计算在 Matlab 上获得的数字的计算噪声。
eps 返回从 1.0 到下一个最大双精度数的距离,所以我可以用它来解释负权重位置上的数字值。但是对于具有高正权重位置的非常大的数字,我可以用什么来解释?
我的意思是我需要一些参考来计算在 Matlab 上获得的数字的计算噪声。
它讨论了舍入误差(您称之为“计算噪声”)、用于表示浮点数的 IEEE 754 标准以及计算机上浮点数学的实现。
我相信阅读这篇论文会回答你的问题,或者至少让你更深入地了解浮点数学是如何工作的。
一些澄清以帮助您理解 - 太大而无法容纳@Richante 帖子的评论:
realmin
首先,和之间的区别eps
:
realmin
是最小的归一化浮点数。您可以以非规范化形式表示较小的数字。eps
是不同数字之间的最小增量。realmin
= eps(realmin) * 2^52
。上面链接的论文中解释了“标准化”和“非标准化”浮点数。
其次,舍入误差并不能表明您可以“信任”n
数字的第几位。
举个例子,这个:
>> ((0.1+0.1+0.1)^512)/(0.3^512)
ans =
1.0000
我们0.3^512
自己除,所以答案应该是一个,对吧?我们应该能够信任高达eps(1)
.
这个计算中的错误实际上是400 * eps
:
>> ((0.1+0.1+0.1)^512)/(0.3^512) - 1
ans =
9.4591e-014
>> ans / eps(1)
ans =
426
计算误差,即n
第 th 位不可信的程度,远大于eps
答案表示中的浮点舍入误差。请注意,我们在这里只进行了六次浮点运算!您可以轻松累积数百万次 FLOP 以产生一个结果。
我再说一遍:eps()
不是您计算中错误的指标。不要试图显示:“我的结果是 1234.567 +/- eps(1234.567)”。这是毫无意义且具有欺骗性的,因为这意味着您的数字比实际更精确。
eps
,您的答案表示中的舍入误差仅为十亿分之一左右。您真正的敌人是每次执行浮点运算时累积的误差,而这正是您需要跟踪的,以便对误差进行有意义的估计。
比 Li-aung Yip 推荐的论文更容易消化的是 Wikipedia 关于machine epsilon的文章。然后阅读每个计算机科学家的...
您的问题措辞不是很好,但我认为您想要一些能够给出从数字到下一个最小双精度数字的距离的东西?如果是这种情况,那么您可以使用:
x = 100;
x + eps(x) %Next largest double-precision number
x - eps(-x) %Next smallest double-precision number
双精度数只有一个符号位,因此从负数向上计数与从正数向下计数相同。
编辑:根据help eps
,“对于所有 X,EPS(X) 等于 EPS(ABS(X))。” 这真的让我很困惑;我看不出这与具有单个符号位的 double 以及不等间距的值如何保持一致。