【发布时间】: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