function entropy( n, p ) {
	var nlq;
	var out;
	var i;
	var q;

	if (
		isnan( n ) ||
		isnan( p ) ||
		p < 0.0 ||
		p > 1.0 ||
		!isNonNegativeInteger( n ) ||
		n === PINF
	) {
		return NaN;
	}
	if ( p === 0 || p === 1 || n === 0 ) {
		return 0.0;
	}
	q = 1.0 - p;
	nlq = n * ln( q );
	out = exp( nlq ) * nlq;
	for ( i = 1; i <= n; i++ ) {
		nlq += ln( ( n - i + 1 ) / i ) + ln( p / q );
		out += exp( nlq ) * nlq;
	}
	return -out;
}
Returns the entropy of a binomial distribution.

@param {NonNegativeInteger} n - number of trials
@param {Probability} p - success probability
@returns {number} entropy

@example
var v = entropy( 100, 0.1 );
// returns ~2.511

@example
var v = entropy( 20, 0.5 );
// returns ~2.223

@example
var v = entropy( 10.3, 0.5 );
// returns NaN

@example
var v = entropy( 20, 1.1 );
// returns NaN

@example
var v = entropy( 20, NaN );
// returns NaN