Fast Random Integer Generation in an Interval
arXiv:1805.10941 · doi:10.1145/3230636
Abstract
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 like 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., 32 bits, 64 bits) 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.
to appear in ACM Transactions on Modeling and Computer Simulation
Cited by in corpus (10)
- Xor Filters: Faster and Smaller Than Bloom and Cuckoo Filters
- Ribbon filter: practically smaller than Bloom and Xor
- ProbMinHash -- A Class of Locality-Sensitive Hash Algorithms for the (Probability) Jaccard Similarity
- SetSketch: Filling the Gap between MinHash and HyperLogLog
- Randen - fast backtracking-resistant random generator with AES+Feistel+Reverie
- Parallel Global Edge Switching for the Uniform Sampling of Simple Graphs with Prescribed Degrees
- JumpBackHash: Say Goodbye to the Modulo Operation to Distribute Keys Uniformly to Buckets
- Algorithms for Generating Small Random Samples
- Batched Ranged Random Integer Generation
- Random Variate Generation with Formal Guarantees