这摘自“每位计算机科学家应了解的浮点算法”(https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html#1378)。作者正在讨论使用保护数字解决的问题。 B是数字的基数。
“当x = 1.00 ... 0和y = .nn ... n,其中n = B-1时,在表达式x-y中出现B-1的相对误差。这里y有p位(全部等于n)。确切的差是x-y = B ^ -p。但是,当仅使用p位数字计算答案时,y的最右边数字会移位...“
为什么它会移位?
答案 0 :(得分:0)
在所讨论的减法中, x 为1.000…, y 为.nn…n(以β为底),其中n为β-1,而< em> y 具有 p 个数字。请注意, y =1-β- p 。请注意,如果我们对齐 x 和 y 的数字:
1.00…0 0.nn…n
然后我们在每个数字中都有 p +1个数字。如果我们仅使用 p 个数字而不是 p +1来计算答案,则必须删除一个数字。
这回答了这个问题,但是,为了进一步讨论Goldberg论文,它前面提到移出的数字只是被丢弃。实际实现中的正常过程是通过将数字四舍五入到以 p 位表示的最接近的值(而不是舍弃)来最大程度地减少错误。但是,本文仅在说明计算的假设替代方案。假设它只是舍弃最后一位数字,那么我们将使用1-β代替原始的 y =1-β- p 1- p 。