Greg Sabino Mullane > Math-GMP-2.06 > Math::GMP

Math-GMP-2.06.tar.gz

Dependencies

Annotate this POD

Website

# CPAN RT

 Open 3
View/Report Bugs
Module Version: 2.06   Source   Latest Release: Math-GMP-2.15

# NAME

Math::GMP - High speed arbitrary size integer math

# SYNOPSIS

use Math::GMP;
my \$n = new Math::GMP 2;

\$n = \$n ** (256*1024);
\$n = \$n - 1;
print "n is now \$n\n";

# DESCRIPTION

Math::GMP was designed to be a drop-in replacement both for Math::BigInt and for regular integer arithmetic. Unlike BigInt, though, Math::GMP uses the GNU gmp library for all of its calculations, as opposed to straight Perl functions. This can result in speed improvements.

The downside is that this module requires a C compiler to install -- a small tradeoff in most cases. Also, this module is not 100% compatible to Math::BigInt.

A Math::GMP object can be used just as a normal numeric scalar would be -- the module overloads most of the normal arithmetic operators to provide as seamless an interface as possible. However, if you need a perfect interface, you can do the following:

use Math::GMP qw(:constant);

\$n = 2 ** (256 * 1024);
print "n is \$n\n";

This would fail without the ':constant' since Perl would use normal doubles to compute the 250,000 bit number, and thereby overflow it into meaninglessness (smaller exponents yield less accurate data due to floating point rounding).

# METHODS

Although the non-overload interface is not complete, the following functions do exist:

## new

\$x = Math::GMP->new(123);

Creates a new Math::GMP object from the passed string or scalar.

\$x = Math::GMP->new('abcd', 36);

Creates a new Math::GMP object from the first parameter which should be represented in the base specified by the second parameter.

## bfac

\$x = Math::GMP->new(5);
\$x->bfac();      # 1*2*3*4*5 = 120

Calculates the factorial of \$x and modifies \$x to contain the result.

## band

\$x = Math::GMP->new(6);
\$x->band(3);      # 0b110 & 0b11 = 1

Calculates the bit-wise AND of it's two arguments and modifies the first argument.

## bxor

\$x = Math::GMP->new(6);
\$x->bxor(3);      # 0b110 & 0b11 = 0b101

Calculates the bit-wise XOR of it's two arguments and modifies the first argument.

## bior

\$x = Math::GMP->new(6);
\$x->bior(3);      # 0b110 & 0b11 = 0b111

Calculates the bit-wise OR of it's two arguments and modifies the first argument.

## bgcd

\$x = Math::GMP->new(6);
\$x->bgcd(4);      # 6 / 2 = 2, 4 / 2 = 2 => 2

Calculates the Greatest Common Divisior of it's two arguments and returns the result.

## fibonacci

\$x = Math::GMP->fibonacci(16);

Calculates the n'th number in the Fibonacci sequence.

## probab_prime

\$x = Math::GMP->new(7);
\$x->probab_prime(10);

Probabilistically Determines if the number is a prime. Argument is the number of checks to perform. Returns 0 if the number is definitely not a prime, 1 if it may be, and 2 if it is definitely is a prime.

# BUGS

As of version 1.0, Math::GMP is mostly compatible with the old Math::BigInt version. It is not a full replacement for the rewritten Math::BigInt versions, though. See the SEE ALSO section on how to achieve to use Math::GMP and retain full compatibility to Math::BigInt.

There are some slight incompatibilities, such as output of positive numbers not being prefixed by a '+' sign. This is intentional.

There are also some things missing, and not everything might work as expected.