繁体   English   中英

Knuth 的 TAOCP 算法 4.3.1D 中是否存在错误?

[英]Is there a bug in Algorithm 4.3.1D of Knuth's TAOCP?

您可以找到算法 4.3.1D 的解释,它出现在计算机编程艺术卷。 2 (第 272-273 页)由 D. Knuth 在此问题的附录中提供。

看起来,在步骤D.6 中qhat预计最多关闭 1。

让我们假设基数是2^32 (即我们正在使用无符号 32 位数字)。 u = [238157824, 2354839552, 2143027200, 0]v = [3321757696, 2254962688] 此分部的预期输出为4081766756 链接

uv都已经按照D.1 中的描述进行了归一化( v[1] > b / 2并且u是零填充的)。

循环D.3D.7 的第一次迭代是无操作的,因为在第一次迭代中qhat = floor((0 * b + 2143027200) / (2254962688)) = 0

在循环的第二次迭代中, qhat = floor((2143027200 * b + 2354839552) / (2254962688)) = 4081766758 Link

我们不需要计算步骤D.4D.5来了解为什么这是一个问题。 由于在D.6 中qhat会减一,因此算法的结果将是4081766758 - 1 = 4081766757 ,但是,结果应该是4081766756 Link

我认为算法中存在错误是否正确,或者我的推理是否存在谬误?

附录

在此处输入图片说明 在此处输入图片说明

没有错误; 您忽略了步骤 D3 中的循环:

D3

在您的示例中,作为此测试的结果,最初设置为 4081766758 的 q̂ 的值减少了两次,首先是 4081766757,然后是 4081766756,然后再继续执行步骤 D4。

(抱歉,我没有时间做出更详细/“正确”的回答。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM