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

Java使用哪种算法进行乘法?,java,algorithm,math,multiplication,biginteger,Java,Algorithm,Math,Multiplication,Biginteger,乘法的可能算法列表相当长: 教科书长乘法 Karatsuba算法 3路Toom–Cook乘法 k路图姆-库克乘法 混合级别Toom–烹饪 Schönhage–Strassen算法 费勒算法 默认情况下Java使用哪一个,为什么?它什么时候会切换到“性能更好”的算法?嗯。。。*操作员将使用硬件提供的任何设备。Java在这方面没有发言权 但是如果您谈论的是biginger.multiply(biginger),答案取决于Java版本。对于Java 11,它使用: 对于小数字来说,天真的“长乘法

乘法的可能算法列表相当长:

  • 教科书长乘法
  • Karatsuba算法
  • 3路Toom–Cook乘法
  • k路图姆-库克乘法
  • 混合级别Toom–烹饪
  • Schönhage–Strassen算法
  • 费勒算法

默认情况下Java使用哪一个,为什么?它什么时候会切换到“性能更好”的算法?

嗯。。。
*
操作员将使用硬件提供的任何设备。Java在这方面没有发言权

但是如果您谈论的是
biginger.multiply(biginger)
,答案取决于Java版本。对于Java 11,它使用:

  • 对于小数字来说,天真的“长乘法”
  • 中型数字的Karatsuba算法,以及
  • 3路Toom–Cook乘法用于大数
对于由80到239
int
值表示的数字,阈值为Karatsuba,对于>=240
int
值,阈值为三向Toom Cook。相乘的数字中较小的一个控制算法选择


默认情况下Java使用哪一个,为什么

哪一个?见上文

为什么??代码中的注释暗示阈值是根据经验选择的;i、 e.有人进行了一些系统测试,以确定哪些阈值具有最佳性能1

你可以通过阅读2


1-目前的实施
biginger
实施自2013年以来没有显著变化,因此可能没有纳入最新的研究成果。

2-请注意,此链接指向Github上的最新版本。

您能给我发送一个链接,以便我可以阅读更多有关的信息吗
@Zabuzard@Stephen
查看我答案中的源代码链接。这是我所知道的关于Java是如何做到这一点的唯一公开信息。你的意思是这样吗?你能澄清一下你说的是不是像
123*345
这样的基本整数乘法吗?或者,如果您谈论的是与更复杂的对象(如
biginger
)的乘法,这些对象不是由固定数量的字节表示的?根据这一点,您的问题可能会被回答为“底层CPU使用什么”,因为常规整数乘法只是转发给CPU,而不是由JVM本身实现。实际上,我需要算法,即软件部分
@OrangeDog
这是关于中等大小的数字和大数字<代码>@Zabuzard