【发布时间】:2017-05-23 09:37:04
【问题描述】:
最近我试图实现大数的 Karatsuba 乘法。然后我尝试将我的实现与 Java BigInteger 实现进行比较。我无法遵循这行代码:
// result = p1 * 2^(32*2*half) + (p3 - p1 - p2) * 2^(32*half) + p2
BigInteger result = p1.shiftLeft(32*half).add(p3.subtract(p1).subtract(p2)).shiftLeft(32*half).add(p2);
根据 Karatsuba 算法,result = (p1 * 10 ^ (2*half) ) + ( (p3 -p1 - p2) * 10 ^ (half)) + (p2)
由于使用 int[] 的实现,我相信 32 是 Java 整数中的位数。
但我不明白涉及向左移动位的部分。你能帮我理解这里发生了什么吗?
【问题讨论】:
-
@djxak 你能告诉我应该看那篇文章的哪一部分吗?似乎不相关。
-
@djxak 你说的是绝对的、完整的、完全的垃圾。这是
BigDecimal中关于 Karatsuba 乘法的 Java 问题。它与 Javascipt 或全局错误处理完全无关。 -
行上方的评论不是回答了这个问题吗?左移就像乘以 2。
-
伙计们,这当然不相关。只是错误的浏览器选项卡,我尽快撤销了标志,不知道为什么评论没有自动删除。现在删了。
-
你给出的算法是十进制的。 Java 实现的基数为 2^32。
标签: java bit-manipulation bitwise-operators karatsuba