# Big Integers

`Zend\Math\BigInteger\BigInteger` offers a class to manage arbitrary length integers. PHP supports integer numbers with a maximum value of `PHP_INT_MAX`, a value defined by your processor architecture and available memory. If you need to manage integers bigger than `PHP_INT_MAX`, you need to use external libraries or PHP extensions such as GMP or BC Math.

`Zend\Math\BigInteger\BigInteger` is able to manage big integers using either the GMP or the BC Math extensions as adapters.

## Methods available

The mathematical functions implemented in `Zend\Math\BigInteger\BigInteger` are:

• `add(\$leftOperand, \$rightOperand)`: add two big integers.
• `sub(\$leftOperand, \$rightOperand)`: subtract two big integers.
• `mul(\$leftOperand, \$rightOperand)`: multiply two big integers.
• `div(\$leftOperand, \$rightOperand)`: divide two big integers (this method returns only the integer part of result).
• `pow(\$operand, \$exp)`: raise one big integer using the other big integer as the exponent.
• `sqrt(\$operand)`: get the square root of a big integer.
• `abs(\$operand)`: get the absolute value of a big integer.
• `mod(\$leftOperand, \$modulus)`: get the modulus of dividing one big integer by another.
• `powmod(\$leftOperand, \$rightOperand, \$modulus)`: raise a big integer using another big integer as the exponent, and reduce by the specified modulus.
• `comp(\$leftOperand, \$rightOperand)`: compare two big integers. Returns < 0 if `\$leftOperand` is less than `\$rightOperand`; > 0 if `\$leftOperand` is greater than `\$rightOperand`; and 0 if they are equal.
• `intToBin(\$int, \$twoc = false)`: convert a big integer into its binary number representation;
• `binToInt(\$bytes, \$twoc = false)`: convert a binary number into a big integer.
• `baseConvert(\$operand, \$fromBase, \$toBase = 10)`: convert a big integer between arbitrary bases.

## Examples

The example below illustrates using the BC Math adapter to calculate the sum of two random integers with 100 digits each.

``````use Zend\Math\BigInteger\BigInteger;
use Zend\Math\Rand;

\$bigInt = BigInteger::factory('bcmath');

\$x = Rand::getString(100, '0123456789');
\$y = Rand::getString(100, '0123456789');

\$len = strlen(\$sum);

printf("%{\$len}s +\n%{\$len}s =\n%s\n%s\n", \$x, \$y, str_repeat('-', \$len), \$sum);
``````

Note that the big integers are managed using strings; even the result of the sum is represented as a string.

Next is an example using the BC Math adapter to generate the binary representation of a negative big integer containing 100 digits.

``````use Zend\Math\BigInteger\BigInteger;
use Zend\Math\Rand;

\$bigInt = BigInteger::factory('bcmath');

\$digits = 100;
\$x = '-' . Rand::getString(\$digits, '0123456789');

\$byte = \$bigInt->intToBin(\$x);

printf(
"The binary representation of a big integer with %d digits:\n%s\nis (in Base64 format): %s\n",
\$digits
\$x,
base64_encode(\$byte)
);
printf("Length in bytes: %d\n", strlen(\$byte));

\$byte = \$bigInt->intToBin(\$x, true);

printf(
"The two's complement binary representation of the big integer with %d digits:\n"
. "%s\nis (in Base64 format): %s\n",
\$digits,
\$x,
base64_encode(\$byte)
);
printf("Length in bytes: %d\n", strlen(\$byte));
``````

The above generates the binary representation of the big integer number using the default binary format, and the two's complement representation (specified with the `true` parameter in the `intToBin` function).

Found a mistake or want to contribute to the documentation? Edit this page on GitHub!