簡體   English   中英

Java 使用哪種算法進行乘法運算?

[英]Which algorithm does Java use for multiplication?

可能的乘法算法列表很長:

  • 教科書長乘法
  • 唐葉算法
  • 3 路 Tom-Cook 乘法
  • k-way Tom-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-way Toom-Cook。 乘以較小的數字控制算法選擇。


Java默認使用哪一個,為什么?

哪個? 看上面。

為什么? 代碼中的注釋暗示閾值是根據經驗選擇的; 即有人做了一些系統的測試,以確定哪些閾值給出了最好的性能1

您可以通過閱讀源代碼2找到更多詳細信息。


1 - 當前的實現BigInteger實現自 2013 年以來沒有顯着變化,因此它可能沒有包含更多最近的研究結果。
2 - 請注意,此鏈接指向 Github 上的最新版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM