Bit recycling for scaling random number generators
For practitioners needing flexible random number generation, this provides a comparative analysis of scaling methods, though it is an incremental survey.
The paper reviews methods for scaling random number generators to produce uniform samples in arbitrary ranges, analyzing both mathematical efficiency and computational speed.
Many Random Number Generators (RNG) are available nowadays; they are divided in two categories, hardware RNG, that provide "true" random numbers, and algorithmic RNG, that generate pseudo random numbers (PRNG). Both types usually generate random numbers $(X_n)$ as independent uniform samples in a range $0,\cdots,2^{b-1}$, with $b = 8, 16, 32$ or $b = 64$. In applications, it is instead sometimes desirable to draw random numbers as independent uniform samples $(Y_n)$ in a range $1, \cdots, M$, where moreover M may change between drawings. Transforming the sequence $(X_n)$ to $(Y_n)$ is sometimes known as scaling. We discuss different methods for scaling the RNG, both in term of mathematical efficiency and of computational speed.