【问题标题】:How do BigNums implementations work?BigNums 实现是如何工作的?
【发布时间】:2010-09-03 00:39:35
【问题描述】:

我想知道 BigInt 和其他类似的东西是如何实现的。我试图查看 JAVA 源代码,但对我来说都是希腊语和拉丁语。 您能否用文字解释一下算法 - 没有代码,以便我了解当我使用 JAVA API 中的某些东西时我实际使用的是什么。 问候

【问题讨论】:

    标签: biginteger


    【解决方案1】:

    从概念上讲,就像您手动进行任意大小的算术一样。你有一个值数组,以及对数组起作用的各种操作的算法。

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

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

    当你加法时,你的加法算法从右边开始,取0+1,给出10+0,给出0,然后——现在是棘手的部分——9+1给出10 ,但是现在我们需要进位,所以我们在下一列加1 over,并把(9+1)%10放到第三列。

    当你的数字增长到足够大时——在这个例子中大于 9999——那么你必须以某种方式分配更多的空间。

    当然,如果您以 reverse 顺序存储数字,这会有些简化。

    真正的实现使用完整的单词,所以模数实际上是 2 的幂次方,但概念是一样的。

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

    【讨论】:

    • 数字食谱中也有一个部分(紧跟 Knuth)。棘手的部分是正确地进行乘法运算。学校算法不能很好地扩展,所以你使用技巧(例如 FFT)。一旦你有了乘法,你就可以用它来表达很多东西。
    猜你喜欢
    • 2012-12-31
    • 2020-07-31
    • 2020-07-24
    • 2014-12-18
    • 2013-07-04
    • 2018-07-21
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多