function betaln( a, b ) {
	var corr;
	var p;
	var q;

	p = min( a, b );
	q = max( a, b );

	if ( p < 0.0 ) {
		return NaN;
	}
	if ( p === 0.0 ) {
		return PINF;
	}
	if ( q === PINF ) {
		return NINF;
	}
	// Case: p and q are big
	if ( p >= 10.0 ) {
		corr = correction( p ) + correction( q ) - correction( p+q );
		return ( -0.5*ln( q ) ) + LN_SQRT_TWO_PI + corr + ( (p-0.5) * ln( p/(p+q) ) ) + ( q*log1p( -p/(p+q) ) ); // eslint-disable-line max-len
	}
	// Case: p is small, but q is big
	if ( q >= 10.0 ) {
		corr = correction( q ) - correction( p+q );
		return gammaln( p ) + corr + p - (p*ln( p+q )) + ( (q-0.5)*log1p( -p/(p+q) ) ); // eslint-disable-line max-len
	}
	// Case: p and q are small
	return ln( gamma( p ) * ( gamma( q ) / gamma( p+q ) ) );
}
Evaluates the natural logarithm of the beta function.

@param {NonNegativeNumber} a - first input value
@param {NonNegativeNumber} b - second input value
@returns {number} natural logarithm of beta function

@example
var v = betaln( 0.0, 0.0 );
// returns Infinity

@example
var v = betaln( 1.0, 1.0 );
// returns 0.0

@example
var v = betaln( -1.0, 2.0 );
// returns NaN

@example
var v = betaln( 5.0, 0.2 );
// returns ~1.218

@example
var v = betaln( 4.0, 1.0 );
// returns ~-1.386

@example
var v = betaln( NaN, 2.0 );
// returns NaN