NAME

Math::Int128 - Manipulate 128 bits integers in Perl

SYNOPSIS

use Math::Int128 qw(int128);

my $i = int128(1);
my $j = $i << 100;
my $k = int128("1234567890123456789000000");
print($i + $j * 1000000);

DESCRIPTION

This module adds support for 128 bit integers, signed and unsigned, to Perl.

In order to compile this module, GCC 4.4 or later is required.

API

See Math::Int64. This module provides a similar set of functions, just s/64/128/g ;-)

Besides that, as object allocation and destruction has been found to be a bottleneck, an alternative set of operations that use their first argument as the output (instead of the return value) is also provided.

They are...

int128_inc int128_dec int128_add int128_sub mul int128_div int128_mod int128_divmod
int128_and int128_or int128_xor int128_left int128_right int128_not
int128_neg

and the corresponding uint128 versions.

For instance:

my $a = int128("1299472960684039584764953");
my $b = int128("-2849503498690387383748");
my $ret = int128();
int128_mul($ret, $a, $b);
int128_inc($ret, $ret); # $ret = $ret + 1
int128_add($ret, $ret, "12826738463");
say $ret;

int128_divmod returns both the result of the division and the remainder:

my $ret = int128();
my $rem = int128();
int128_divmod($ret, $rem, $a, $b);

TODO

Support more operations as log2, pow, etc.

SEE ALSO

Math::Int64, Math::GMP, Math::GMPn.

http://perlmonks.org/?node_id=886488.

COPYRIGHT AND LICENSE

Copyright (C) 2007, 2009, 2011, 2012 by Salvador Fandino (sfandino@yahoo.com)

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.1 or, at your option, any later version of Perl 5 you may have available.