function F() {
	var d1;
	var d2;
	if ( !(this instanceof F) ) {
		if ( arguments.length === 0 ) {
			return new F();
		}
		return new F( arguments[ 0 ], arguments[ 1 ] );
	}
	if ( arguments.length ) {
		d1 = arguments[ 0 ];
		d2 = arguments[ 1 ];
		if ( !isPositive( d1 ) ) {
			throw new TypeError( format( 'invalid argument. Numerator degrees of freedom must be a positive number. Value: `%s`.', d1 ) );
		}
		if ( !isPositive( d2 ) ) {
			throw new TypeError( format( 'invalid argument. Denominator degrees of freedom must be a positive number. Value: `%s`.', d2 ) );
		}
	} else {
		d1 = 1.0;
		d2 = 1.0;
	}
	defineProperty( this, 'd1', {
		'configurable': false,
		'enumerable': true,
		'get': function get() {
			return d1;
		},
		'set': function set( value ) {
			if ( !isPositive( value ) ) {
				throw new TypeError( format( 'invalid assignment. Must be a positive number. Value: `%s`.', value ) );
			}
			d1 = value;
		}
	});
	defineProperty( this, 'd2', {
		'configurable': false,
		'enumerable': true,
		'get': function get() {
			return d2;
		},
		'set': function set( value ) {
			if ( !isPositive( value ) ) {
				throw new TypeError( format( 'invalid assignment. Must be a positive number. Value: `%s`.', value ) );
			}
			d2 = value;
		}
	});
	return this;
}
F distribution constructor.

@constructor
@param {PositiveNumber} [d1=1.0] - numerator degrees of freedom
@param {PositiveNumber} [d2=1.0] - denominator degrees of freedom
@throws {TypeError} `d1` must be a positive number
@throws {TypeError} `d2` must be a positive number
@returns {F} distribution instance

@example
var f = new F( 1.0, 1.0 );

var y = f.cdf( 0.8 );
// returns ~0.465

var v = f.mode;
// returns NaN