"

# Bernoulli

The Bernoulli distribution can be thought of as a coin flip, returning either `true` or `false` with a probability of p, where p lies on the closed interval [0, 1]. When p == 1, the distribution will always return `true`, while when p == 0, the distribution will always return `false`.

``````var probability = Bernoulli.FromP(0.5);
var ratio = Bernoulli.FromRatio(5, 10);
``````

Internally, the probability is represented by `_p`, a `UInt64`. When sampling, a random `UInt64` is generated and compared to `_p`; if it's less than `_p`, return `true`, otherwise return `false`.

This has the side effect of not allowing distributions that always return `true`. To counteract this, p == 1 is a special case where the RNG is not sampled, and simply always returns `true`.

The `FromInverse` method is provided to allow more control over the probability of the distribution. It takes a `UInt64` and sets `_p` directly.

``````var inverse = Bernoulli.FromInverse(UInt64.MaxValue / 2 + 1);
``````

Bernoulli Distribution on Wikipedia

# Uniform

A uniform distribution over an interval has a uniform (or equal) probability of producing any value within that range. For example, the outcome of rolling a 6 sided die is represented by a uniform distribution over the interval [1, 6].

``````Uniform.Int32 d6 = Uniform.NewInclusive(1, 6);
Uniform.Int32 d20 = Uniform.NewInclusive(1, 20);

// Some may argue that there's no such thing as a perfect grade, but this may get you pretty close.
Uniform.Int32 grade = Uniform.New(0.0, 100.0);

// TimeSpans are also supported - try not to burn your popcorn.
Uniform.TimeSpan times = Uniform.NewInclusive(TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(3));
``````

Continuous Uniform Distribution on Wikipedia

Discrete Uniform Distribution on Wikipedia

# Unit Interval

Unit interval distributions are a special case of uniform distributions over the unit interval*, the interval from 0 to 1. Four distinct distributions are provided, closed-open, open-closed, closed-closed, and open-open.

``````using RandN.Distributions.UnitInterval;
var closedOpen = ClosedOpen.Double.Instance;
var open = Open.Double.Instance;
``````

Unit Interval on Wikipedia

* Treating a unit interval as any of the four shapes over an interval from 0 to 1: `[0, 1)`, `(0, 1]`, `[0, 1]`, and `(0, 1)`