【问题标题】:Understanding ulps in catastrophic cancellation了解灾难性取消中的 ulps
【发布时间】:2017-05-14 04:22:16
【问题描述】:

我正在阅读what every computer scientist should know about floating point,但我不明白以下语句:

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

根据我的阅读,ulps 是最后一位的单位,所以如果我用 11.2 舍入 11.1556,我在最后一位最多可以有 0.5 个单位,即最多 0.05 个错误。

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

【问题讨论】:

    标签: math floating-point ieee-754


    【解决方案1】:

    如果将错误 0.1 - 0.0292 = 0.0708 与精确结果的 ulp (0.0001) 相关联,则错误甚至是 708 ulps。原始版本在这里包含一个错字(参见your reference 中的footnote 6)。

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 2010-12-04
      • 1970-01-01
      • 2022-10-14
      • 2016-12-26
      • 2012-11-10
      相关资源
      最近更新 更多