The R Project SVN R

Rev

Rev 23078 | Rev 36820 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 23078 Rev 26531
Line 76... Line 76...
76
    if (K == 1 && p_tot == 0.) return;/* trivial border case: do as rbinom */
76
    if (K == 1 && p_tot == 0.) return;/* trivial border case: do as rbinom */
77
 
77
 
78
    /* Generate the first K-1 obs. via binomials */
78
    /* Generate the first K-1 obs. via binomials */
79
 
79
 
80
    for(k = 0; k < K-1; k++) { /* (p_tot, n) are for "remaining binomial" */
80
    for(k = 0; k < K-1; k++) { /* (p_tot, n) are for "remaining binomial" */
-
 
81
	if(prob[k]) {
81
	pp = prob[k] / p_tot;
82
	    pp = prob[k] / p_tot;
82
	rN[k] = (int) rbinom((double) n,  pp);
83
	    rN[k] = ((pp < 1.) ? (int) rbinom((double) n,  pp) :
-
 
84
		     /*>= 1; > 1 happens because of rounding */
-
 
85
		     n);
83
	n -= rN[k];
86
	    n -= rN[k];
-
 
87
	}
-
 
88
	else rN[k] = 0;
84
	if(n <= 0) /* we have all*/ return;
89
	if(n <= 0) /* we have all*/ return;
85
	p_tot -= prob[k]; /* i.e. = sum(prob[(k+1):K]) */
90
	p_tot -= prob[k]; /* i.e. = sum(prob[(k+1):K]) */
86
    }
91
    }
87
    rN[K-1] = n;
92
    rN[K-1] = n;
88
    return;
93
    return;