The R Project SVN R

Rev

Rev 68947 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 68947 Rev 77685
Line 28... Line 28...
28
double pbinom(double x, double n, double p, int lower_tail, int log_p)
28
double pbinom(double x, double n, double p, int lower_tail, int log_p)
29
{
29
{
30
#ifdef IEEE_754
30
#ifdef IEEE_754
31
    if (ISNAN(x) || ISNAN(n) || ISNAN(p))
31
    if (ISNAN(x) || ISNAN(n) || ISNAN(p))
32
	return x + n + p;
32
	return x + n + p;
33
    if (!R_FINITE(n) || !R_FINITE(p)) ML_ERR_return_NAN;
33
    if (!R_FINITE(n) || !R_FINITE(p)) ML_WARN_return_NAN;
34
 
34
 
35
#endif
35
#endif
36
    if(R_nonint(n)) {
36
    if(R_nonint(n)) {
37
	MATHLIB_WARNING(_("non-integer n = %f"), n);
37
	MATHLIB_WARNING(_("non-integer n = %f"), n);
38
	ML_ERR_return_NAN;
38
	ML_WARN_return_NAN;
39
    }
39
    }
40
    n = R_forceint(n);
40
    n = R_forceint(n);
41
    /* PR#8560: n=0 is a valid value */
41
    /* PR#8560: n=0 is a valid value */
42
    if(n < 0 || p < 0 || p > 1) ML_ERR_return_NAN;
42
    if(n < 0 || p < 0 || p > 1) ML_WARN_return_NAN;
43
 
43
 
44
    if (x < 0) return R_DT_0;
44
    if (x < 0) return R_DT_0;
45
    x = floor(x + 1e-7);
45
    x = floor(x + 1e-7);
46
    if (n <= x) return R_DT_1;
46
    if (n <= x) return R_DT_1;
47
    return pbeta(p, x + 1, n - x, !lower_tail, log_p);
47
    return pbeta(p, x + 1, n - x, !lower_tail, log_p);