function sample( rand, alpha, beta ) {
	var lx;
	var ly;
	var xy;
	var u;
	var v;
	var x;
	var y;
	while ( true ) {
		u = rand();
		v = rand();
		x = pow( u, 1.0/alpha );
		y = pow( v, 1.0/beta );
		xy = x + y;
		if ( xy <= 1.0 ) {
			if ( xy > 0.0 ) {
				return x / ( xy );
			}
			lx = ln( u ) / alpha;
			ly = ln( v ) / beta;
			if ( lx > ly ) {
				ly -= lx;
				lx = 0.0;
			} else {
				lx -= ly;
				ly = 0.0;
			}
			return exp( lx - ln( exp(lx) + exp(ly) ) );
		}
	}
}
Handles general case.

@private
@param {PRNG} rand - PRNG for uniformly distributed numbers
@param {PositiveNumber} alpha - first shape parameter
@param {PositiveNumber} beta - second shape parameter
@returns {Probability} pseudorandom number