微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java 使用哪种算法进行乘法运算?

如何解决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 举报,一经查实,本站将立刻删除。