你可以找到算法 4.3.1D 的解释,它出现在《计算机编程艺术》一书中。2(第 272-273 页)由 D. Knuth 在本问题的附录中撰写。
看来,在步骤D.6中,qhat
预计最多偏离 1。
让我们假设 base 是2^32
(即我们正在使用无符号的 32 位数字)。让u = [238157824, 2354839552, 2143027200, 0]
和v = [3321757696, 2254962688]
。该部门的预期产出是4081766756
Link
两者u
和都已经按照D.1v
中的描述进行了标准化(并且是零填充的)。v[1] > b / 2
u
循环D.3到D.7的第一次迭代是无操作的,因为qhat = floor((0 * b + 2143027200) / (2254962688)) = 0
在第一次迭代中。
在循环的第二次迭代中,qhat = floor((2143027200 * b + 2354839552) / (2254962688)) = 4081766758
Link。
我们不需要计算步骤D.4和D.5来了解为什么会出现问题。由于qhat
将在D.6中减一,因此算法的结果将作为 出来4081766758 - 1 = 4081766757
,但是,结果应该是4081766756
Link。
我认为算法中存在错误是正确的,还是我的推理存在谬误?