function factorial2( n ) {
	var last;
	var out;
	var v;
	var i;
	if ( isnan( n ) ) {
		return NaN;
	}
	if ( n > FLOAT64_MAX_NTH_DOUBLE_FACTORIAL ) {
		return PINF;
	}
	if ( n < 0 || isInteger( n ) === false ) {
		return NaN;
	}
	v = n|0; // asm type annotation
	if ( v === 0|0 || v === 1|0 ) {
		return 1|0; // asm type annotation
	}
	if ( isEven( v ) ) {
		last = 2|0; // asm type annotation
	} else {
		last = 3|0; // asm type annotation
	}
	out = 1;
	for ( i = v|0; i >= last; i -= 2|0 ) {
		out *= i|0; // asm type annotation
	}
	return out;
}
Evaluates the double factorial of `n`.

@param {number} n - input value
@returns {(NonNegativeInteger|number)} double factorial

@example
var v = factorial2( 3 );
// returns 3

@example
var v = factorial2( 4 );
// returns 8

@example
var v = factorial2( 5 );
// returns 15

@example
var v = factorial2( 301 );
// returns Infinity