function betaincinv( p, a, b, upper ) {
	if (
		isnan( p ) ||
		isnan( a ) ||
		isnan( b )
	) {
		return NaN;
	}
	if ( a <= 0.0 || b <= 0.0 ) {
		return NaN;
	}
	if ( p < 0.0 || p > 1.0 ) {
		return NaN;
	}
	if ( upper ) {
		return kernelBetaincinv( a, b, 1.0 - p, p )[ 0 ];
	}
	return kernelBetaincinv( a, b, p, 1.0 - p )[ 0 ];
}
Returns a value `p` such that `p = betainc(a, b, x)`.

@param {Probability} p - function parameter
@param {PositiveNumber} a - function parameter
@param {PositiveNumber} b - function parameter
@param {boolean} [upper=false] - boolean indicating if the function should return the inverse of the upper tail of the incomplete beta function
@returns {number} function value

@example
var y = betaincinv( 0.2, 3.0, 3.0 );
// returns ~0.327

@example
var y = betaincinv( 0.4, 3.0, 3.0 );
// returns ~0.446

@example
var y = betaincinv( 0.4, 3.0, 3.0, true );
// returns ~0.554

@example
var y = betaincinv( 0.4, 1.0, 6.0 );
// returns ~0.082

@example
var y = betaincinv( 0.8, 1.0, 6.0 );
// returns ~0.235