Large numbers

Navigate Language Fundamentals topic: v  d  e )

The integer primitive type with the largest range of value is the long, from -263 to 263-1. If you need greater or lesser values, you have to use the BigInteger class in the package java.math. A BigInteger object can represent any integer (as large as the RAM on the computer can hold) as it is not mapped on a primitive type. Respectively, you need to use the BigDecimal class for great decimal numbers.

However, as these perform much slower than primitive types, it is recommended to use primitive types when it is possible.

BigInteger edit

The BigInteger class represents integers of almost any size. As with other objects, they need to be constructed. Unlike regular numbers, the BigInteger represents an immutable object - methods in use by the BigInteger class will return a new copy of a BigInteger.

To instantiate a BigInteger, you can create it from either byte array, or from a string. For example:

  Code section 3.23: 1 quintillion, or 10^18. Too large to fit in a long.
BigInteger i = new BigInteger("1000000000000000000");

BigInteger cannot use the normal Java operators. They use the methods provided by the class.

  Code section 3.24: Multiplications and an addition.
BigInteger a = new BigInteger("3");
BigInteger b = new BigInteger("4");

// c = a^2 + b^2
BigInteger c = a.multiply(a).add(b.multiply(b));

It is possible to convert to a long, but the long may not be large enough.

  Code section 3.25: Conversion.
BigInteger aBigInteger = new BigInteger("3");
long aLong = aBigInteger.longValue();

BigDecimal edit

The BigInteger class cannot handle decimal numbers. The BigDecimal class represents a floating point value of arbitrary precision. It is composed of both a BigInteger, and a scale value (represented by a 32-bit integer).


To do:
Add some exercises like the ones in Variables

Googol = 10100