laziness, impatience, and hubris PerlMonks

### Re: How can I tell if a number is a power of 2?

by larryk (Friar)
 on Jan 28, 2002 at 22:52 UTC ( #142148=note: print w/replies, xml ) Need Help??

in reply to How can I tell if a number is a power of 2?

Of course implementation is everything:
```#!perl
use strict;
use warnings;

use Benchmark qw/cmpthese/;

sub tye {
my \$x = shift;
0 == ( \$x & (\$x-1) ) ? 1 : 0;
}

sub tye2 {
my \$x = shift;
!( \$x & (\$x-1) );
}

cmpthese( -5,
{
tye => q!tye(rand 1000000)!,
tye2 => q!tye2(rand 1000000)!,
}
);

__END__
Benchmark: running tye, tye2, each for at least 5 CPU seconds...
tye :  6 wallclock secs ( 5.07 usr +  0.00 sys =  5.07 CPU) @ 200612
+.27/s (n=1016703)
tye2:  6 wallclock secs ( 5.02 usr +  0.00 sys =  5.02 CPU) @ 225545
+.83/s (n=1131789)
Rate  tye tye2
tye  200612/s   -- -11%
tye2 225546/s  12%   --

Replies are listed 'Best First'.
Re: Re: How can I tell if a number is a power of 2?
by Juerd (Abbot) on Jan 29, 2002 at 02:15 UTC
And just because implementation is everything:
```#!/usr/bin/perl
use strict;
use warnings;

use Benchmark qw/cmpthese/;

sub tye2 {
my \$x = shift;
!( \$x & (\$x-1) );
}

sub tye3 {
my (\$x) = @_;
!( \$x & (\$x-1) );
}

sub tye4 {
!( \$_[0] & (\$_[0] - 1) );
}

cmpthese( -5,
{
tye2 => q!tye2(rand 1000000)!,
tye3 => q!tye3(rand 1000000)!,
tye4 => q!tye4(rand 1000000)!,
}
);
__END__
tye2:6wcs (5.30usr + 0.01sys = 5.31CPU) @ 384813.56/s (n=2043360)
tye3:6wcs (5.07usr + 0.00sys = 5.07CPU) @ 381046.15/s (n=1931904)
tye4:5wcs (5.42usr + 0.00sys = 5.42CPU) @ 493005.17/s (n=2672088)
Rate tye3 tye2 tye4
tye3 381046/s   --  -1% -23%
tye2 384814/s   1%   -- -22%
tye4 493005/s  29%  28%   --

```2;0 juerd@ouranos:~\$ perl -e'undef christmas'
Segmentation fault
2;139 juerd@ouranos:~\$

Create A New User
Node Status?
node history
Node Type: note [id://142148]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (11)
As of 2017-11-21 15:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
In order to be able to say "I know Perl", you must have:

Results (304 votes). Check out past polls.

Notices?