in reply to Loaded die
Rather than brute force iteration, you could always simulate:
#! perl -slw use strict; use Data::Dump qw[ pp ]; use List::Util qw[ sum ]; use Math::Random::MT qw[ rand ]; my $throws = 5; my $sides = 5; my @probs = ( 0.05, 0.1, 0.2, 0.3, 0.35 ); my @values = ( 1, 5, 7, 13, 17 ); my @lookup = map{ ( $values[ $_ ] ) x ( $probs[ $_ ] * 100 ); } 0 .. $#values; our $MIN //= 60; our $RUNS //= 1e5; my $moreThanMin = 0; for ( 1 .. $RUNS ) { my $total = sum map{ $lookup[ rand( scalar @lookup ) ] } 1 .. $thr +ows; ++$moreThanMin if $total > $MIN; } printf "Probability based on $RUNS simulations: %.3f%%", $moreThanMin / $RUNS * 100; __END__ c:\test>895892 -RUNS=1e6 Probability based on 1e6 simulations: 48.752%
It won't save time on small die, but on the larger ones you can decide how much time you want to spend to get closer and closer to the answer.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Loaded die
by Microcebus (Beadle) on Mar 28, 2011 at 14:20 UTC | |
by BrowserUk (Patriarch) on Mar 28, 2011 at 14:49 UTC | |
by Microcebus (Beadle) on Mar 28, 2011 at 15:25 UTC | |
by BrowserUk (Patriarch) on Mar 28, 2011 at 16:15 UTC | |
by Microcebus (Beadle) on Mar 28, 2011 at 19:09 UTC |