function Cauchy() {
	var gamma;
	var x0;
	if ( !(this instanceof Cauchy) ) {
		if ( arguments.length === 0 ) {
			return new Cauchy();
		}
		return new Cauchy( arguments[ 0 ], arguments[ 1 ] );
	}
	if ( arguments.length ) {
		x0 = arguments[ 0 ];
		gamma = arguments[ 1 ];
		if ( !isNumber( x0 ) || isnan( x0 ) ) {
			throw new TypeError( format( 'invalid argument. Location parameter must be a number. Value: `%s`.', x0 ) );
		}
		if ( !isPositive( gamma ) ) {
			throw new TypeError( format( 'invalid argument. Scale parameter must be a positive number. Value: `%s`.', gamma ) );
		}
	} else {
		x0 = 0.0;
		gamma = 1.0;
	}
	defineProperty( this, 'x0', {
		'configurable': false,
		'enumerable': true,
		'get': function get() {
			return x0;
		},
		'set': function set( value ) {
			if ( !isNumber( value ) || isnan( value ) ) {
				throw new TypeError( format( 'invalid assignment. Must be a number. Value: `%s`.', value ) );
			}
			x0 = value;
		}
	});
	defineProperty( this, 'gamma', {
		'configurable': false,
		'enumerable': true,
		'get': function get() {
			return gamma;
		},
		'set': function set( value ) {
			if ( !isPositive( value ) ) {
				throw new TypeError( format( 'invalid assignment. Must be a positive number. Value: `%s`.', value ) );
			}
			gamma = value;
		}
	});
	return this;
}
Cauchy distribution constructor.

@constructor
@param {number} [x0=0.0] - location parameter
@param {PositiveNumber} [gamma=1.0] - scale parameter
@throws {TypeError} `gamma` must be a positive number
@returns {Cauchy} distribution instance

@example
var cauchy = new Cauchy( 1.0, 1.0 );

var y = cauchy.cdf( 0.8 );
// returns ~0.437

var v = cauchy.median;
// returns 1.0