Principles of Random Variate Generation