Java的BigInteger类

时间:2015-02-28 02:13:04

标签: java math

Java的BigInteger类采用什么算法进行乘法和除法,以及它们各自的时间复杂度是什么?

Java的BigInteger类使用什么原始类型 - byte,short,int等 - 以及为什么?

Java的BigInteger类如何处理其原始类型已签名的事实?如果答案是它只是做它并且它真的很混乱,那就是我需要/想要知道的全部内容。我真正得到的是它是否像一些python库作弊一样欺骗,因为它们不是用python编写的?

3 个答案:

答案 0 :(得分:3)

我查看了BigInteger here的源代码。这是我找到的。

BigInteger没有"作弊"。在Java"作弊"通过使用所谓的" native"来完成。功能。有关这些内容的详尽列表,请参阅java.lang.Math

BigInteger使用int来表示其数据。

private transient int[] words;

是的,它非常混乱。很多人都在嚼着这样的人。

答案 1 :(得分:1)

Oracle的java.math.BigInteger类经历了从Java 7到Java 8的一些广泛改进。通过检查grepcode.com上的源代码,亲自看看。它不会作弊,它都是纯粹的java。

在内部,它使用整数的sign-magnitude representation,使用int值数组来存储幅度。回想一下,java int是一个32位的值。使用所有32位而不考虑符号。这个大小也很方便,因为两个int的乘积适合java long

从Java 8开始,BigInteger类添加了一些高级算法,如Karatsuba和Toom-Cook乘法,以提高数千位整数的性能。

答案 2 :(得分:0)

It uses int

原因:这是大多数平台上最快的。