# Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world.

#### Uniform Distribution

`#include <boost/math/distributions/uniform.hpp>`
```namespace boost{ namespace math{
template <class RealType = double,
class Policy   = policies::policy<> >
class uniform_distribution;

typedef uniform_distribution<> uniform;

template <class RealType, class Policy>
class uniform_distribution
{
public:
typedef RealType value_type;

uniform_distribution(RealType lower = 0, RealType upper = 1); // Constructor.
: m_lower(lower), m_upper(upper) // Default is standard uniform distribution.
// Accessor functions.
RealType lower()const;
RealType upper()const;
}; // class uniform_distribution

}} // namespaces
```

The uniform distribution, also known as a rectangular distribution, is a probability distribution that has constant probability.

The continuous uniform distribution is a distribution with the probability density function:

f(x) =1 / (upper - lower)   for lower < x < upper

f(x) =zero   for x < lower or x > upper

and in this implementation:

1 / (upper - lower)   for x = lower or x = upper

The choice of x = lower or x = upper is made because statistical use of this distribution judged is most likely: the method of maximum likelihood uses this definition.

There is also a discrete uniform distribution.

Parameters lower and upper can be any finite value.

The random variate x must also be finite, and is supported lower <= x <= upper.

The lower parameter is also called the location parameter, that is where the origin of a plot will lie, and (upper - lower) is also called the scale parameter.

The following graph illustrates how the probability density function PDF varies with the shape parameter:

Likewise for the CDF:

##### Member Functions
```uniform_distribution(RealType lower = 0, RealType upper = 1);
```

Constructs a uniform distribution with lower lower (a) and upper upper (b).

Requires that the lower and upper parameters are both finite; otherwise if infinity or NaN then calls domain_error.

```RealType lower()const;
```

Returns the lower parameter of this distribution.

```RealType upper()const;
```

Returns the upper parameter of this distribution.

##### Non-member Accessors

All the usual non-member accessor functions that are generic to all distributions are supported: Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, mean, median, mode, variance, standard deviation, skewness, kurtosis, kurtosis_excess, range and support.

The domain of the random variable is any finite value, but the supported range is only lower <= x <= upper.

##### Accuracy

The uniform distribution is implemented with simple arithmetic operators and so should have errors within an epsilon or two.

##### Implementation

In the following table a is the lower parameter of the distribution, b is the upper parameter, x is the random variate, p is the probability and q = 1-p.

Function

Implementation Notes

pdf

Using the relation: pdf = 0 for x < a, 1 / (b - a) for a <= x <= b, 0 for x > b

cdf

Using the relation: cdf = 0 for x < a, (x - a) / (b - a) for a <= x <= b, 1 for x > b

cdf complement

Using the relation: q = 1 - p, (b - x) / (b - a)

quantile

Using the relation: x = p * (b - a) + a;

quantile from the complement

x = -q * (b - a) + b

mean

(a + b) / 2

variance

(b - a) 2 / 12

mode

any value in [a, b] but a is chosen. (Would NaN be better?)

skewness

0

kurtosis excess

-6/5 = -1.2 exactly. (kurtosis - 3)

kurtosis

9/5

##### References
 Copyright © 2006-2021 Nikhar Agrawal, Anton Bikineev, Matthew Borland, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle Walker and Xiaogang Zhang Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)