% File src/library/stats/man/Binomial.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2026 R Core Team
% Distributed under GPL 2 or later

\name{Binomial}
\alias{Binomial}
\alias{dbinom}
\alias{pbinom}
\alias{qbinom}
\alias{rbinom}
\title{The Binomial Distribution}
\description{
  Density, distribution function, quantile function and random
  generation for the binomial distribution with parameters \code{size}
  and \code{prob}.

  This is conventionally interpreted as the number of \sQuote{successes}
  in \code{size} trials.
}
\usage{
dbinom(x, size, prob, log = FALSE)
pbinom(q, size, prob, lower.tail = TRUE, log.p = FALSE)
qbinom(p, size, prob, lower.tail = TRUE, log.p = FALSE)
rbinom(n, size, prob)
}
\arguments{
  \item{x, q}{vector of quantiles, the number of successes.}
  \item{p}{vector of probabilities.}
  \item{n}{number of observations. If \code{length(n) > 1}, the length
    is taken to be the number required.}
  \item{size}{number of trials (zero or more).}
  \item{prob}{probability of success on each trial.}
  \item{log, log.p}{logical; if \code{TRUE}, probabilities
    are given as logarithms.}
  \item{lower.tail}{logical; if \code{TRUE} (default), probabilities are
    \eqn{P[X \le x]}, otherwise, \eqn{P[X > x]}.}
}
\value{
  \code{dbinom} gives the density,
  \code{pbinom} is the cumulative distribution function, and
  \code{qbinom} is the quantile function of the binomial distribution.
  \code{rbinom} generates random deviates.

  If \code{size} is not an integer, \code{NaN} is returned.

  The length of the result is determined by \code{n} for
  \code{rbinom}, and is the maximum of the lengths of the
  numerical arguments for the other functions.

  The numerical arguments other than \code{n} are recycled to the
  length of the result.  Only the first elements of the logical
  arguments are used.
}
\details{
  The binomial distribution with \code{size} \eqn{= n} and
  \code{prob} \eqn{= p} has density
  \deqn{p(x) = {n \choose x} {p}^{x} {(1-p)}^{n-x}}{
    p(x) = choose(n, x) p^x (1-p)^(n-x)}
  for \eqn{x = 0, \ldots, n}.
  Note that binomial \emph{coefficients} can be computed by
  \code{\link{choose}} in \R.

  If an element of \code{x} is not integer, the result of \code{dbinom}
  is zero, with a warning.

  \eqn{p(x)} is computed using Loader's algorithm, see the reference below.

  The quantile is defined as the smallest value \eqn{x} such that
  \eqn{F(x) \ge p}, where \eqn{F} is the distribution function.
}
\seealso{
  \link{Distributions} for other standard distributions, including
  \code{\link{dnbinom}} for the negative binomial, and
  \code{\link{dpois}} for the Poisson distribution.
}
\source{
  For \code{dbinom} a saddle-point expansion is used: see
  \bibcitet{R:Loader:2000}.

  \code{pbinom} uses \code{\link{pbeta}}.

  \code{qbinom} uses the Cornish--Fisher Expansion to include a skewness
  correction to a normal approximation, followed by a search.

  \code{rbinom} (for \code{size < .Machine$integer.max}) is based on
  \bibcitet{R:Kachitvichyanukul+Schmeiser:1988}.
  For larger values it uses inversion.
  in \PR{19049} (2026-04) it was reported that there were two wrong signs in the
  above publication (already found by the GSL implementor in 2003!).  Fixing
  these makes very rarely a difference for \code{(size, prob)}\eqn{= (n,
  \pi)} combinations.  You can use \code{\link{RNGkind}(binom.kind =
  "BUGGY_BTPE")} to re-activate the old (very slightly) buggy behaviour,
  see also \code{\link{RNGkind}}.
}
\references{
  \bibshow{*}
}
\examples{
require(graphics)
# Compute P(45 < X < 55) for X Binomial(100,0.5)
sum(dbinom(46:54, 100, 0.5))

## Using "log = TRUE" for an extended range :
n <- 2000
k <- seq(0, n, by = 20)
plot (k, dbinom(k, n, pi/10, log = TRUE), type = "l", ylab = "log density",
      main = "dbinom(*, log=TRUE) is better than  log(dbinom(*))")
lines(k, log(dbinom(k, n, pi/10)), col = "red", lwd = 2)
## extreme points are omitted since dbinom gives 0.
mtext("dbinom(k, log=TRUE)", adj = 0)
mtext("extended range", adj = 0, line = -1, font = 4)
mtext("log(dbinom(k))", col = "red", adj = 1)
}
\keyword{distribution}
