Perhaps the word you are missing is 'magnitude'.
Try this: #! perl -slw
use strict;
sub log10{ log( $_[0] ) / log( 10 ) }
sub magnitude{ int log10( $_[0] ) }
sub sign { $_[0] <=> 0 }
my @nums = sort{
$b <=> $a
} qw[ 1.3e-3 3.7e-5 102 46 1e-4 1e-12 ];
my @byMag;
my $prev = $nums[ 0 ];
for my $i ( 1 .. $#nums ) {
my $this = $nums[ $i ];
my $diff = abs( magnitude( $prev ) - magnitude( $this ) );
--$diff if sign( magnitude( $this ) ) == sign( magnitude( $prev )
+);
push @byMag, $prev;
push @byMag, ( 0 ) x $diff if $diff > 1;
$prev = $this;
}
push @byMag, $prev;
print for @byMag;
__END__
C:\test>1054890.pl
102
46
0
0
0
1.3e-3
1e-4
3.7e-5
0
0
0
0
0
0
1e-12
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|