List of random number generators

Random number generators are important in many kinds of technical applications, including physics, engineering or mathematical computer studies (e.g., Monte Carlo simulations), cryptography and gambling (on game servers).

This list includes many common types, regardless of quality.

Pseudorandom number generators (PRNGs)

The following algorithms are pseudorandom number generators.

Generator Date First proponents References Notes
Middle-square method 1946 J. von Neumann [1] In its original form, it's of poor quality and of historical interest only.
Lehmer generator 1951 D. H. Lehmer [2] One of the very earliest and most influential design.
Linear congruential generator (LCG) 1958 W. E. Thomson; A. Rotenberg [3][4] A generalisation of the Lehmer generator and historically the most influential and studied generator.
Lagged Fibonacci generator (LFG) 1958 G. J. Mitchell and D. P. Moore [5]
Linear feedback shift register (LFSR) 1965 R. C. Tausworthe [6] A hugely influential design. Also called Tausworthe generators.
Wichmann–Hill generator 1982 B. A. Wichmann and D. I. Hill [7] A combination of three small LCGs, suited to 16-bit CPUs. Widely used in many programs, e.g. it is used in Excel 2003 and later versions for the function RAND[8] and it was the default generator in the language Python up to version 2.2[9].
Rule 30 1983 S. Wolfram [10] Based on cellular automata.
Inversive congruential generator (ICG) 1986 J. Eichenauer and J. Lehn [11]
Park-Miller generator 1988 S. K. Park and K. W. Miller [12] A specific implementation of a Lehmer generator, widely used because built-in in the C and C++ languages as the function `minstd'.
MINMAX generator 1991 G. K. Savvidy and N. G. Ter-Arutyunyan-Savvidy [13] It is a member of the class of matrix linear congruential generator, a generalisation of LCG. The rationale behind the MINMAX family of generators relies on results from chaos theory in classical mechanics.
Add-with-carry (AWC) 1991 G. Marsaglia and A. Zaman [14] A modification of Lagged-Fibonacci generators.
Subtract-with-borrow (SWC) 1991 G. Marsaglia and A. Zaman [15] A modification of Lagged-Fibonacci generators. A SWB generator is the basis for the RANLUX generator[16], widely used e.g. for particle physics simulations.
Maximally periodic reciprocals 1992 R. A. J. Matthews [17] A method with roots in number theory, although never used in practical applications.
KISS 1993 G. Marsaglia [18] Prototypical example of a combination generator.
Multiply-with-carry (MWC) 1994 G. Marsaglia; C. Koç [19][20]
Complementary-multiply-with-carry (CMWC) 1997 R. Couture and P. L’Ecuyer [21]
Mersenne Twister (MT) 1998 M. Matsumoto and T. Nishimura [22] Closely related with LFSRs. In its MT19937 implementation is probably the most commonly used modern PRNG. Default generator in the Python language starting from version 2.3.
Xorshift 2003 G. Marsaglia [23] It is a very fast sub-type of LFSR generators. Marsaglia also suggested as an improvement the xorwow generator, in which the output of a xorshift generator is added with a Weyl sequence. The xorwow generator is the default generator is the CURAND library of the nVidia CUDA application programming interface for graphics processing units.
Well equidistributed long-period linear (WELL) 2006 F. Panneton, P. L'Ecuyer and M. Matsumoto [24] A LFSR closely related with Mersenne Twister, aiming at remedying some of its shortcomings.
A small noncryptographic PRNG (JSF) 2009 Bob Jenkins [25]
Advanced Randomization System (ARS) 2011 J. Salmon, M. Moraes, R. Dror and D. Shaw [26] A simplified version of the AES block cipher, leading to very fast performance on system supporting the AES-NI.
Threefry 2011 J. Salmon, M. Moraes, R. Dror and D. Shaw [26] A simplified version of the Threefish block cipher, suitable for GPU implementations.
Philox 2011 J. Salmon, M. Moraes, R. Dror and D. Shaw [26] A simplification and modification of the block cipher Threefish with the addition of an S-box.
SplitMix 2014 G. L. Steele, D. Lea and C. H. Flood [27] Included in Java Development Kit 8 and above.
Permuted Congruential Generator (PCG) 2014 M. E. O'Neill [28] A modification of LCG.
Xoroshiro128+ 2018 D. Blackman, S. Vigna [29] A modification of Marsaglia's Xoroshift generators, one of the fastest generators on modern 64-bit CPUs.

Cryptographic algorithms

Cipher algorithms and cryptographic hashes can be used as very high-quality pseudorandom number generators. However, generally they are considerably slower (typically by a factor 2-10) than fast, non-cryptographic random number generators.

These include:

A few cryptographically secure pseudorandom number generator do not rely on cipher algorithms but try to link mathematically the difficulty of distinguishing their output from a `true' random stream to a computationally difficult problem. These approaches are theoretically important but are too slow to be practical in most applications. They include:

Random number generators that use external entropy

These approaches combine a pseudo-random number generator (often in the form of a block or stream cipher) with an external source of randomness (e.g., mouse movements, delay between keyboard presses etc.).

Hardware (true) random number generators (TRNGs)

The following is a list of companies that produce hardware random number generators:

  • Araneus Alea
  • ComScire
  • Entropy Key
  • Fox-IT Fox RandomCard
  • ID Quantique
  • Intel 810/815/840/845G chipsets
  • LETech
  • QuintessenceLabs
  • TectroLabs
  • TRNG98
  • VIA Padlock engine
  • Whitewood Entropy Engine
  • Kidekin TRNG
  • OneRNG
  • BitBabbler
  • ProtegoST
  • ubld.it TrueRN
  • Real Random EaaS

Random number servers

The following (non-exhaustive) list of websites claim to provide random numbers generated from a truly random source, with many providing additional randomisation services:

The following websites claim to generate pseudo-random numbers:

Well-known PRNG APIs

See also

References

  1. Some of von Neumann's 1949 papers were printed only in 1951. John von Neumann, “Various techniques used in connection with random digits,” in A.S. Householder, G.E. Forsythe, and H.H. Germond, eds., Monte Carlo Method, National Bureau of Standards Applied Mathematics Series, vol. 12 (Washington, D.C.: U.S. Government Printing Office, 1951): pp. 36-38.
  2. Lehmer, Derrick H. (1951). "Mathematical methods in large-scale computing units". Proceedings of 2nd Symposium on Large-Scale Digital Calculating Machinery: 141–146.
  3. Thomson, W. E. (1958). "A Modified Congruence Method of Generating Pseudo-random Numbers". The Computer Journal. 1 (2): 83.
  4. Rotenberg, A. (1960). "A New Pseudo-Random Number Generator". Journal of the ACM. 7 (1): 75–77.
  5. D. E. Knuth, The Art of Computer Programming, Vol. 2 Seminumerical Algorithms, 3rd ed., Addison Wesley Longman (1998); See pag. 27.
  6. Tausworthe, R. C. (1965). "Random Numbers Generated by Linear Recurrence Modulo Two" (PDF). Mathematics of Computation. 19: 201–209.
  7. Wichmann, Brian A.; Hill, David I. (1982). "Algorithm AS 183: An Efficient and Portable Pseudo-Random Number Generator". Journal of the Royal Statistical Society. Series C (Applied Statistics). 31 (2): 188–190.
  8. "Microsoft Support - Description of the RAND function in Excel". Apr 17, 2018.
  9. "Documentation » The Python Standard Library » 9. Numeric and Mathematical Modules » 9.6. random — Generate pseudo-random numbers".
  10. Wolfram, S. (1983). "Statistical mechanics of cellular automata". Rev. Mod. Phys. 55 (3): 601–644. Bibcode:1983RvMP...55..601W. doi:10.1103/RevModPhys.55.601.
  11. Eichenauer, Jürgen; Lehn, Jürgen (1986). "A nonlinear congruential pseudorandom number generator". Statistische Hefte. 27: 315–326.
  12. Park, Stephen K.; Miller, Keith W. (1988). "Random Number Generators: Good Ones Are Hard To Find" (PDF). Communications of the ACM. 31 (10): 1192–1201.
  13. Savvidy, G.K; Ter-Arutyunyan-Savvidy, N.G (1991). "On the Monte Carlo simulation of physical systems". Journal of Computational Physics. 97 (2): 566. Bibcode:1991JCoPh..97..566S. doi:10.1016/0021-9991(91)90015-D.
  14. George, Marsaglia; Zaman, Arif (1991). "A new class of random number generators". Annals of Applied Probability. 1 (3): 462–480.
  15. George, Marsaglia; Zaman, Arif (1991). "A new class of random number generators". Annals of Applied Probability. 1 (3): 462–480.
  16. Martin, Lüscher (1994). "A portable high-quality random number generator for lattice field theory simulations". Computer Physics Communications. Volume 79, Issue 1: 100–110.
  17. Matthews, Robert A. J. (1992). "Maximally periodic reciprocals" (PDF). Bull. Inst. Math. Appl. 28: 147–148.
  18. Marsaglia, George; Zaman, Arif (1993). "The KISS generator". Technical report, Department of Statistics, Florida State University, Tallahassee, FL, USA.
  19. Post by George Marsaglia on the newsgroup sci.stat.math dated 1 August 2018 with title 'Yet another RNG'.
  20. Koç, Cemal (1995). "Recurring-with-Carry Sequences". Journal of Applied Probability. Vol. 32, No. 4: 966–971.
  21. Couture, Raymond; L'Ecuyer, Pierre (1997). "Distribution properties of multiply-with-carry random number generators" (PDF). Mathematics of Computation. 66 Number. 218: 591–607.
  22. Matsumoto, M.; Nishimura, T. (1998). "MersenneTwister: A623-dimensionally Equidistributed Uniform Pseudo-Random Number Generator". ACM Trans. on Modeling and Computer Simulation. 8 (1): 3–30.
  23. Marsaglia, George (July 2003). "Xorshift RNGs". Journal of Statistical Software. 8 (14). doi:10.18637/jss.v008.i14.
  24. Panneton, François O.; l'Ecuyer, Pierre; Matsumoto, Pierre (March 2006). "Improved long-period generators based on linear recurrences modulo 2" (PDF). ACM Transactions on Mathematical Software. 32 (1): 1&ndash, 16. doi:10.1145/1132973.1132974.
  25. Jenkins, Bob (2009). "A small noncryptographic PRNG".
  26. 1 2 3 Salmon, John; Moraes, Mark; Dror, Ron; Shaw, David (2011). "Parallel random numbers: as easy as 1, 2, 3". Proceedings of 2011 International Conference for High Performance Computing, Networking, Storage and Analysis, Article No. 16. doi:10.1145/2063384.2063405.
  27. Steele, Guy L. Jr.; Lea, Doug; Flood, Christine H. (2014). "Fast splittable pseudorandom number generators" (PDF). OOPSLA '14 Proceedings of the 2014 ACM International Conference on Object Oriented Programming Systems Languages & Applications.
  28. O'Neill, Melissa E. (2014). "PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation" (PDF). Technical Report.
  29. Blackman, David; Vigna, Sebastiano. "Scrambled Linear Pseudorandom Generators". arXiv:1805.01407 [cs.DS].
  30. Thomas Symul; Syed M. Assad; Ping Koy Lam (2011-06-07), "Real time demonstration of high bitrate quantum random number generation with coherent laser light", Applied Physics Letters, 98 (23): 231103, arXiv:1107.4438, doi:10.1063/1.3597793
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.