views:

189

answers:

4

Does valueOf for BigInteger have any limitations ? I'm not sure but read somewhere, that given number can be of length = long only.

+2  A: 

BigInteger's valueOf() method thakes a long as its sole parameter. So the maximum number you can pass to it is the maximum a long can represent (2^63-1 = 9223372036854775807).

Johannes Weiß
A: 

According to The Java API Specification for the BigInteger class, the BigInteger.valueOf method takes a long as the argument, so the largest number that can be obtained through the BigInteger.valueOf method is Long.MAX_VALUE which is 2^63 - 1.

coobird
+2  A: 

The BigInteger class itself is used to represent immutable arbitrary-precision integers. Meaning it can represent integers of any size (limited of course by the memory on your computer).

However the valueOf method returns a BigInteger whose value is equal to that of the specified long. So a BigInteger created in this way by definition can only be a large as Long.MAX_VALUE

BigInteger objects created by the other methods and constructors of the BigInteger class can of course be larger than Long.MAX_VALUE.

Take for example the code snipped below:

BigInteger big1 = BigInteger.valueOf(Long.MAX_VALUE);
BigInteger big2 = BigInteger.valueOf(Long.MAX_VALUE);
BigInteger big3 = big1.add(big2);

The BigInteger named big3 is larger than Long.MAX_VALUE even though its constituent parts were created using the valueOf method.

Tendayi Mawushe
A: 

Consider using the BigInteger(String val, int radix) constructor. That can create a BigInteger of any size.

finnw