views:

209

answers:

2

Is there any standard way to use integers of arbitrary length in Perl? I am working on code that generates x64 assembly for tests, and I'm tired of manipulating 32 bits at a time.

I'm using Perl 5.10.0, for what it's worth.

+15  A: 

use Math::BigInt

mobrule
and possibly `use bigint;` which makes *every* numeric literal in its scope a BigInt without `Math::BigInt->new`. Use with care, of course.
hobbs
Or `use bignum;`, which extends bigint with BigFloat.
Anonymous
+10  A: 

If you only want to use big integers, you can use the bigint, which you can scope to a file:

 use bigint;

or just a limited scope:

 {
 use bigint;
 ...;
 }

If you need big floating point numbers as well as big integers, you can use the bignum pragma in the same way. Either way, these will slow down your program slightly (or significantly if you are doing a lot of math), so you should only use them for the parts where you really need them. However, faster isn't better than correct. :)

If you want very precise control over which numbers use the big* math, you can use the underlying classes that implement them and create objects yourself rather than applying the big* semantics to everything. Look that Math::Big* modules.

I talk about this more in the Benchmarking chapter of Mastering Perl since computers are too fast nowadays to use a factorial as a slow function, and we also added a section on big numbers it to the upcoming Effective Perl Programming, 2nd Edition.

brian d foy