Basic Random Number Generators
 quality requirements
 speed
 memory use
 efficient generation of random number subsequences
 using random numbers as real ones
 using random numbers as a bit stream
BRNG

Type

Description


MCG31m1

pseudorandom

A 31bit multiplicative congruential generator.

R250

pseudorandom

A generalized feedback shift register generator.

MRG32k3a

pseudorandom

A combined multiple recursive generator with two components of order 3.

MCG59

pseudorandom

A 59bit multiplicative congruential generator.

WH

pseudorandom
 A set of 273 WichmannHill combined multiplicative congruential generators ( j = 1, 2, ... , 273 ). 
MT19937

pseudorandom

Mersenne Twister pseudorandom number generator.

MT2203

pseudorandom
 A set of 6024 MersenneTwister pseudorandom number generators ( j = 1,...,6024). 
SFMT19937

pseudorandom

SIMDoriented Fast Mersenne Twister pseudorandom number generator.

SOBOL (with AntonovSaleev [Ant79] modification)

quasirandom

A 32bit Gray codebased generator producing lowdiscrepancy sequences for dimensions 1≤s≤40

NIEDERREITER (with AntonovSaleev [Ant79] modification)

quasirandom

A 32bit Gray codebased generator producing lowdiscrepancy sequences for dimensions 1≤s≤318.

PHILOX4X32X10

pseudorandom

A Philox4x3210 counterbased pseudorandom number generator.

ARS5

pseudorandom

A counterbased pseudorandom number generator, which uses instructions from the AESNI set. Available in IA® architectures supporting this instruction set.

ABSTRACT

pseudorandom or quasirandom, depending on the userprovided settings

Abstract source of random numbers. See Abstract Basic Random Number Generators. Abstract Streams section for details.

NONDETERMINISTIC

Nondeterministic

 Stream Initialization Subroutine. See section Random Streams and RNGs in Parallel Computation for details.
 Integer Output Generation Subroutine. Every generated integral value (within certain bounds) may be considered a random bit vector. For details on randomness of individual bits or bit groups, see Basic Random Generator Properties and Testing Results.
 Single Precision FloatingPoint Random Number Vector Generation Subroutine. The subroutine generates a real arithmetic vector of uniform distribution over the interval [a, b).
 Double Precision FloatingPoint Random Number Vector Generation Subroutine. The subroutine generates a real arithmetic vector of uniform distribution over the interval [a, b).
 , left shift of 128bit integerwbyafollowed by exclusive OR operation
 , right shift of each 32bit integer in quadruplewbybfollowed by andoperation with quadruple of 32bit masksmask,mask = (mask_{1}mask_{2}mask_{3}mask_{4})
 , right shift of 128bit integerwbyc
 , left shift of each 32bit integer in quadruplewbyd
 , , kth 32bit integer in quadruplewn
 Parameters of the generator take the following values:a= 8,b= 8,c= 8,d= 18,mask_{1}=0xBFFFFFFG,mask_{2}=0xBFFAFFFF,mask_{3}=0xDDFECB7F,mask_{4}=0xDFFFFFEF
 cn=cn1+ 1
 wn=f(cn), wherefis a function that takes a 128bit argument and returns a 128bit number. The returned number is obtained as follows:
 The argumentcis interpreted as four 32bit numbers , where , putk_{0}^{0} =k_{0} andk_{1}^{0} =k_{1}.
 The following recurrence is calculated:Wheremulhi(a,b)andmullo(a,b)are high and low 32bit parts of the a*b product, respectively.
 Putf(c) =, whereN= 10
 Integer output:r4n+k=wn(k), wherewn(k)is thekth 32bit integer in quadruplewn,k= 0, 1, 2, 3
 Real output:un=rn/2^{32}
 cn=cn1+ 1
 wn=f(cn), wherefis a function that takes a 128bit argument and returns a 128bit number. The returned number is obtained as follows:
 Putc_{0} =c xor kandk_{0} =k.
 The following recurrence is calculated N times:
 ci+1=SubBytes(c)
 ci+1=ShiftRows(ci+1)
 ci+1=MixColumns(ci+1), this step is omitted ifi + 1 = N
 ci+1=AddRoundKey(ci+1,kj)
 Lo(ki+1)=Lo(k)+ 0x9E3779B97F4A7C15Hi(ki+1)=Hi(k)+ 0xBB67AE8584CAA73B
 Putf(c) = cN, whereN= 5
 Integer output:r4n+k=wn(k), wherewn(k)is thekth 32bit integer in quadruplewn,k= 0, 1, 2, 3
 Real output:un=rn/2^{32}
 You want to study the system using the same uniform random sequence but under different distribution parameters [Mikh2000]. It is unnecessary to generate uniform random numbers as many times as many different parameters you want to investigate.