#!/usr/bin/perl -w use strict; use Data::Dumper; use Math::Pari qw/binomial pari2num/; my $val = hypergeometric(5,3,53,5); print "Hyper = $val\n"; sub hypergeometric { my ($M,$p,$F,$n) = @_; return unless $n>0 && $n == int($n) && $p > 0 && $p == int($p) && $M > 0 && $M <= $n+$p; return 0 unless $p <= $M && $p == int($p); return pari2num((binomial($M,$p) * binomial($F-$M, $n-$p) / binomial($F,$n))); } #### Hyper = 0.00393074501208321