Perl-Sensitive Sunglasses PerlMonks

### Re: Rand() with ?log10? distribution?

 on Jun 07, 2013 at 03:39 UTC ( #1037564=note: print w/replies, xml ) Need Help??

in reply to Rand() with ?log10? distribution?

It won't be exactly a log 10 distribution, but rand()**2 * \$max would probably be close to what you're looking for.

For example:

```\$rand_max = 1025;
sub my_rand{
\$rnd = rand;
return int(\$rnd*\$rnd * \$rand_max);
}

@a = ();
for(1..100000) {
\$n = my_rand();
\$a[\$n]++;
}

\$i = 1;
while(\$i <= 1024) {
print "\$i: ", \$a[\$i], \$/;
\$i = \$i*2;
}

will produce a distribution similar to this:

```1: 1338
2: 913
4: 718
8: 526
16: 397
32: 280
64: 195
128: 137
256: 99
512: 65
1024: 42

If the curve is too steep (or not steep enough), you can adjust the exponent to 1.5, or 2.5 etc., instead of 2.

Replies are listed 'Best First'.
Re^2: Rand() with ?log10? distribution?
by BrowserUk (Pope) on Jun 07, 2013 at 05:47 UTC

We have a winner! sub primo2{ int( rand() ** 4 * \$_[0] ) } Thanks.

I came up with a few of my own:

```sub   xx2{ int(   2**(   2**( rand() * logN( \$_[0],   2 ) ) ) ) }
sub  xx10{ int(  10**(  10**( rand() * logN( \$_[0],  10 ) ) ) ) }
sub  xx20{ int(  20**(  20**( rand() * logN( \$_[0],  20 ) ) ) ) }
sub xx100{ int( 100**( 100**( rand() * logN( \$_[0], 100 ) ) ) ) }

which I actually prefer to your original because they drop faster at the beginning but don't dip so low at the end, but they are computationally expensive and require the upper limited supplied as a log.

Then I tried varying the exponent on yours, and found its ease of tunability the winning feature. Many thanks.

graph (The above 4 are red, blue, green and cyan respectively, your original(^2) is magenta, and my chosen variation on it (^4) is yellow.)

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.

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

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2018-02-22 11:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
When it is dark outside I am happiest to see ...

Results (291 votes). Check out past polls.

Notices?