了解灾难性取消中的ulps

时间:2016-12-29 20:11:12

标签: math floating-point ieee-754

我正在阅读what every computer scientist should know about floating point并且我不理解以下声明:

  

当操作数受到舍入错误时,会发生灾难性取消。例如,在二次公式中,出现表达式b2-4ac。量b2和4ac受到舍入误差的影响,因为它们是浮点乘法的结果。假设它们四舍五入到最接近的浮点数,因此精确到.5 ulp 。当它们被减去时,取消会导致许多准确的数字消失,主要是数字被舍入错误污染的数字。因此,差异可能有许多ulps的错误。例如,考虑b = 3.34,a = 1.22,c = 2.28。 b2 - 4ac的准确值是.0292。但是b2轮到11.2和4ac轮到11.1,因此最终答案是.1 这是70 ulps 的误差,即使11.2 - 11.1正好等于.1。减法没有引入任何错误,而是暴露了早期乘法中引入的错误。

从我读过的内容来看,ulps是最后一个单位,所以如果我用11.2将11.1556舍入,我最后可以得到最多0.5个单位,即错误的最大值为0.05。

但是为什么如果我得到11.2 - 11.1 = 0.1,这是一个70 ulps的错误?我原以为这最后一个值是0.7 ulps的错误

1 个答案:

答案 0 :(得分:1)

如果您将错误0.1 - 0.0292 = 0.0708与确切结果(0.0001)的ulp相关联,则错误甚至是708 ulps。原始版本中包含拼写错误(请参阅footnote 6中的your reference)。