in reply to Re: Hypergeometric Probability Calculation
in thread Hypergeometric Probability Calculation
Thank-you: that was exactly the problem. Merely replacing Math::Big::factorial with Math::BigFloat::bfac fixed it. The code's below for posterity's sake:
use strict; use Math::BigFloat; my $G = 11057; #$ARGV[0]; my $C = $ARGV[0]; my $n = $ARGV[1]; my $k = $ARGV[2]; sub choose { my $ret_val = Math::BigFloat->new(); my $n = Math::BigFloat->new($_[0]); my $r = Math::BigFloat->new($_[1]); my $n_r = Math::BigFloat->new($_[0] - $_[1]); $n->bfac(); $r->bfac(); $n_r->bfac(); $ret_val = $n / ($n_r * $r); return $ret_val; } my $p = Math::BigFloat->new('1'); my $denom = Math::BigFloat->new(choose($G, $n)); for (my $i = 0; $i < $k; $i++) { my $val1 = $G - $C; my $val2 = $n - $i; my $delta = Math::BigFloat->new(); $delta = choose($C, $i) * choose($val1, $val2) / $denom; $p -= $delta; } print "Probability estimate: $p\n";
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Hypergeometric Probability Calculation (speeding up 'choose' )
by Abigail-II (Bishop) on Dec 05, 2003 at 12:32 UTC | |
by tilly (Archbishop) on Dec 05, 2003 at 16:50 UTC | |
by Itatsumaki (Friar) on Mar 22, 2004 at 05:28 UTC | |
by tilly (Archbishop) on Mar 23, 2004 at 02:42 UTC | |
by Itatsumaki (Friar) on Mar 29, 2004 at 17:45 UTC | |
by QM (Parson) on Mar 22, 2004 at 05:44 UTC | |
by Itatsumaki (Friar) on Dec 05, 2003 at 17:12 UTC |
In Section
Seekers of Perl Wisdom