### 8.1 Overview

The distributions package provide a framework for some commonly used
probability distributions.

An overview of available continuous distributions:

### 8.2 Distribution Framework

The distribution framework provides the means to compute probability density
function (PDF) probabilities and cumulative distribution function (CDF)
probabilities for common probability distributions. Along with the direct
computation of PDF and CDF probabilities, the framework also allows for the
computation of inverse PDF and inverse CDF values.

Using a distribution object, PDF and CDF probabilities are easily computed
using the `cumulativeProbability` methods. For a distribution
`X`, and a domain value, `x`,
`cumulativeProbability` computes `P(X <= x)`
(i.e. the lower tail probability of `X`).

TDistribution t = new TDistribution(29);
double lowerTail = t.cumulativeProbability(-2.656); // P(T <= -2.656)
double upperTail = 1.0 - t.cumulativeProbability(2.75); // P(T >= 2.75)

The inverse PDF and CDF values are just as easily computed using the
`inverseCumulativeProbability` methods. For a distribution `X`,
and a probability, `p`, `inverseCumulativeProbability`
computes the domain value `x`, such that:

`P(X <= x) = p`, for continuous distributions
`P(X <= x) <= p`, for discrete distributions

Notice the different cases for continuous and discrete distributions. This is the result
of PDFs not being invertible functions. As such, for discrete distributions, an exact
domain value can not be returned. Only the "best" domain value. For Commons-Math, the "best"
domain value is determined by the largest domain value whose cumulative probability is
less-than or equal to the given probability.

### 8.3 User Defined Distributions

Since there are numerous distributions and Commons-Math only directly
supports a handful, it may be necessary to extend the distribution
framework to satisfy individual needs. It is recommended that the
RealDistribution,
IntegerDistribution and
MultivariateRealDistribution
interfaces serve as base types for any extension. These serve as the basis for all the
distributions directly supported by Commons-Math and using those interfaces
for implementation purposes will ensure any extension is compatible with the
remainder of Commons-Math. To aid in implementing a distribution extension,
the AbstractRealDistribution,
AbstractIntegerDistribution and
AbstractMultivariateRealDistribution
provide implementation building blocks and offer basic distribution functionality.
By extending these abstract classes directly, much of the repetitive distribution
implementation is already developed and should save time and effort in developing
user-defined distributions.