Non-uniform pseudo-random variate generation