/*
* deal -- compute combination probabilities for card draws
*
- * ($Id: deal.c,v 1.18 1995/04/14 01:50:14 esr Exp esr $)
+ * ($Id: deal.c,v 1.19 1995/04/14 13:55:40 esr Exp esr $)
*
* Based on the `cardprobs' program written by Jeremy C. York
* <jeremy@stat.cmu.edu> in September 1993; cleanup, comments,
static double hyper_prob(i, k, M, N)
int i, k, M, N;
{
- double exp();
+ double p, exp();
/* for the signal handler */
si = i;
sM = M;
sN = N;
- return(exp(log_a_choose_b(M,i)
+ p = exp(log_a_choose_b(M,i)
+ log_a_choose_b(N-M,k-i)
- - log_a_choose_b(N, k)));
+ - log_a_choose_b(N, k));
+
+ if (p > 1)
+ p = 1;
+
+ return(p);
}
static double log_a_choose_b(a,b)
signal(SIGFPE, choosecatch);
- p = lgamma((double) (a+1)) - lgamma((double) (b+1)) -
+ if (b >= a)
+ p = 0;
+ else
+ p = lgamma((double) (a+1)) - lgamma((double) (b+1)) -
lgamma((double) (a-b+1));
if (verbose)