Re: Extracting bits out of huge numbers
- From: sisyphus <sisyphus359@xxxxxxxxx>
- Date: Tue, 29 Jul 2008 19:12:18 -0700 (PDT)
On Jul 29, 10:28 pm, hofer <bla...@xxxxxxxxxx> wrote:
Hi,
I'd like to work with huge integers (> 64 bit precision)
Thus I can't use ordinary perl integers.
I thought Math::BigInt wouldn't be a too bad choice.
It's easy enough go create BigInts.
my $a = Math::BigInt->new("0x7777666655544443333222211110000");
my $b = Math::BigInt->new("0x1111111111111111111111111111111");
Calculating with them is also fine:
$a->badd($b); # $a = $a + $b
Now I would like to extract certain bits out of this huge number:
Example Bits 16 bis 12 should result in 0b00001 == 0x1 == 1
Bits 17 bis 12 should result in 0b100001 == 0x21 == 33
So far I see two ways of doing this conversion.
However I'm not really appealed by either solution.
Do you know anything faster / better or even another CPAN module?
Math::GMP will allow you to access individual bits. I would expect it
to be siginificantly faster than Math::BigInt, though I haven't done
any benchmarking.
use warnings;
use Math::GMP;
$x = Math::GMP->new('12344' x 7);
# print the 10 least siginificant bits:
print Math::GMP::gmp_tstbit($x, $_) for reverse(0..9);
print "\n";
Cheers,
Rob
.
- Follow-Ups:
- Re: Extracting bits out of huge numbers
- From: hofer
- Re: Extracting bits out of huge numbers
- References:
- Extracting bits out of huge numbers
- From: hofer
- Extracting bits out of huge numbers
- Prev by Date: FAQ 3.8 Is there a pretty-printer (formatter) for Perl?
- Next by Date: Re: Which NNTP module to use?
- Previous by thread: Re: Extracting bits out of huge numbers
- Next by thread: Re: Extracting bits out of huge numbers
- Index(es):