BigNums实现如何工作?

时间:2010-09-02 16:31:36

标签: biginteger

我想知道BigInt和其他类似的东西是如何实现的。我试图查看JAVA源代码,但它对我来说都是希腊语和拉丁语。 你能用语言向我解释算法 - 没有代码,这样我就能理解当我使用JAVA API时我实际使用的内容。 问候

1 个答案:

答案 0 :(得分:11)

从概念上讲,就像你手工制作任意尺寸的算术一样。你有类似数组的东西,以及适用于数组的各种操作的算法。

假设您要将100添加到901。首先将这两个数字作为数组开始:

 [0, 1, 0, 0]
 [0, 9, 0, 1]

添加时,您的添加算法从右侧开始,采用0+1,提供10+0,提供0,以及 - 现在是棘手的部分 - - 9+1提供了10,但现在我们需要执行,因此我们将下一列添加1,并将(9+1)%10放入第三列。

如果你的数字变得足够大 - 在这个例子中大于9999 - 那么你必须以某种方式分配更多的空间。

如果您以反向顺序存储数字,这当然会有所简化。

真正的实现使用全字,因此模数实际上是2的大功率,但概念是相同的。

在Knuth中有一个非常好的部分。