Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re: Rolling a biased die

by giulienk (Curate)
on Apr 12, 2002 at 21:35 UTC ( #158682=note: print w/replies, xml ) Need Help??

in reply to Rolling a biased die

I'm using the code i stole from the Perl CookBook, Recipe 2.10 "Generating Biased Random Numbers". It goes like this:
#code from the Perl Cookbook: see the link above for credits sub weight_to_dist { my %weights = @_; my %dist = (); my $total = 0; my ($key, $weight); local $_; foreach (values %weights) { $total += $_; } while ( ($key, $weight) = each %weights ) { $dist{$key} = $weight/$total; } return %dist; } sub weighted_rand { my %dist = @_; my ($key, $weight); while (1) { # to avoid floating point inaccuracies my $rand = rand; while ( ($key, $weight) = each %dist ) { return $key if ($rand -= $weight) < 0; } } }
Use weight_to_dist to obtain the HASH with distribution and then give it to weighted_rand for a random biased value.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://158682]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (3)
As of 2019-01-21 05:07 GMT
Find Nodes?
    Voting Booth?
    After Perl5, I'm mostly interested in:

    Results (351 votes). Check out past polls.

    • (Sep 10, 2018 at 22:53 UTC) Welcome new users!