Fast Random Integer Generation in an Interval
By Daniel Lemire. 2018
58 citations recorded by the source corpus.
In simulations, probabilistic algorithms, and statistical tests, we often generate random integers in an interval (e.g., [0,s)). For example, random integers in an interval are essential to the Fisher-Yates random shuffle. Consequently, popular languages such as Java, Python, C++, Swift and Go include ranged random integer generation functions as part of their runtime libraries. Pseudo-random values are usually generated in words of a fixed number of bits (e.g., 32b, 64b) using algorithms such as a linear congruential generator. We need functions to convert such random words to random integers in an interval ([0,s)) without introducing statistical biases. The standard functions in programming languages such as Java involve integer divisions. Unfortunately, division instructions are relatively expensive. We review an unbiased function to generate ranged integers from a source of random words that avoids integer divisions with high probability. To establish the practical usefulness of the approach, we show that this algorithm can multiply the speed of unbiased random shuffling on x64 processors. Our proposed approach has been adopted by the Go language for its implementation of the shuffle function.
Subfields: Artificial Intelligence, Computational Theory and Mathematics, Computer Vision and Pattern Recognition, Algorithms & Complexity
How researchers see this paper
The researchers whose trusted networks rank it highest, strongest advocate first. Every researcher gets a different order.
In Artificial Intelligence
- K. Jarrod Millman
- Pearu Peterson
- Matthew Brett
- S. Van Der Walt
- Kevin Sheppard
- Stephan Hoyer
- Jonathan J. Helmus
- Shuhao Cao
In Computational Theory and Mathematics
In Computer Vision and Pattern Recognition
In Algorithms & Complexity
Citations in the corpus
- Array programming with NumPy (2020, methodology): “[68] D.”