如何解决Java 使用哪种算法进行乘法运算?
可能的乘法算法列表很长:
- 教科书长乘法
- Karatsuba 算法
- 3 路 Toom–Cook 乘法
- k-way Toom–Cook 乘法
- 混合级 Toom–Cook
- Schönhage–Strassen 算法
- Fürer 算法
Java 默认使用哪个,为什么?它什么时候切换到“更好的性能”算法?
解决方法
好吧……*
运算符将使用硬件提供的任何内容。 Java 在这方面没有发言权。
但如果您谈论的是 BigInteger.multiply(BigInteger)
,答案取决于 Java 版本。对于 Java 11,它使用:
- 用于小数的简单“长乘法”,
- 中等大小的 Karatsuba 算法,以及
- 大数的 3 路 Toom–Cook 乘法。
对于由 80 到 239 个 int
值表示的数字,阈值是 Karatsuba,对于 >= 240 int
值是一个 3 路 Toom-Cook。被乘数中的较小者控制算法选择。
Java 默认使用哪个,为什么?
哪些?见上文。
为什么?代码中的注释暗示阈值是根据经验选择的;即有人进行了一些系统测试以确定哪些阈值提供了最佳性能1。
您可以通过阅读source code2了解更多详情。
1 - 当前的实现 BigInteger
实现自 2013 年以来没有显着变化,因此它可能没有包含更多最近的研究结果。
2 - 请注意,此链接指向 Github 上的最新版本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。