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


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)


A singleton distribution contains exactly one value, returning that value whenever it is sampled.

var distribution = Singleton.New("Hello, World");

Assert.Equals("Hello, World", distribution.Sample());

Singleton on Wikipedia