function DiscreteUniform() {
	var a;
	var b;
	if ( !(this instanceof DiscreteUniform) ) {
		if ( arguments.length === 0 ) {
			return new DiscreteUniform();
		}
		return new DiscreteUniform( arguments[ 0 ], arguments[ 1 ] );
	}
	if ( arguments.length ) {
		a = arguments[ 0 ];
		b = arguments[ 1 ];
		if ( !isInteger( a ) ) {
			throw new TypeError( format( 'invalid argument. Minimum support must be an integer. Value: `%s`.', a ) );
		}
		if ( !isInteger( b ) ) {
			throw new TypeError( format( 'invalid argument. Maximum support must be an integer. Value: `%s`.', b ) );
		}
		if ( a > b ) {
			throw new RangeError( format( 'invalid arguments. Minimum support must be less than or equal to maximum support. Value: `(%d, %d)`.', a, b ) );
		}
	} else {
		a = 0;
		b = 1;
	}
	defineProperty( this, 'a', {
		'configurable': false,
		'enumerable': true,
		'get': function get() {
			return a;
		},
		'set': function set( value ) {
			if ( !isInteger( value ) ) {
				throw new TypeError( format( 'invalid assignment. Must be an integer. Value: `%s`.', value ) );
			}
			if ( value > b ) {
				throw new RangeError( format( 'invalid assignment. Must be less than or equal to %u. Value: `%d`.', b, value ) );
			}
			a = value;
		}
	});
	defineProperty( this, 'b', {
		'configurable': false,
		'enumerable': true,
		'get': function get() {
			return b;
		},
		'set': function set( value ) {
			if ( !isInteger( value ) ) {
				throw new TypeError( format( 'invalid assignment. Must be an integer. Value: `%s`.', value ) );
			}
			if ( a > value ) {
				throw new RangeError( format( 'invalid assignment. Must be greater than or equal to %u. Value: `%s`.', a, value ) );
			}
			b = value;
		}
	});
	return this;
}
Discrete uniform distribution constructor.

@constructor
@param {integer} [a=0] - minimum support
@param {integer} [b=1] - maximum support
@throws {TypeError} `a` must be an integer
@throws {TypeError} `b` must be an integer
@throws {RangeError} `a` must be less than `b`
@returns {DiscreteUniform} distribution instance

@example
var discreteUniform = new DiscreteUniform( 0, 1 );

var y = discreteUniform.cdf( 0.8 );
// returns 0.5

var mu = discreteUniform.mean;
// returns 0.5