Knuth长除法算法

时间:2017-12-22 10:53:00

标签: algorithm integer-division arbitrary-precision

我正在实施D. E. Knuth的计算机编程艺术第2卷第4.3.2节的算法D.

在步骤D3中,我应该计算q = floor(u[j+n]*BASE+u[j+n-1] / v[n-1])r = u[j+n]*BASE+u[j+n-1] mod v[n-1]。这里,u(被除数)和v(除数)分别是长度为m+nn的单精度*数组。 BASE是表示基,对于32或64位的二进制计算机,分别等于2 ^ 32或2 ^ 64。

我的问题是qr的精确度。据我了解算法的其余部分,它们应该是单精度*,但很容易发现许多情况,它们必须是双精度*以适应结果。

这些值应如何计算?精确度如何?

*表达式单/双精度是指整数运算,而不是浮点运算。

1 个答案:

答案 0 :(得分:1)

当除数被归一化(最高位设置)时,商总是适合单个单词。利用两个基本表示的幂,通过廉价的左移操作实现归一化。

Link to a more detailed and formal answer.