slm: OpenCL code base  0.1
rng.cl
Go to the documentation of this file.
1 
10 
14 #define IS_RNG_AVAILABLE 1
15 
37 static uint lehmer_rand_uint(uint *rng_state)
38 {
39  // Lehmer linear-congruential RNG (revised, 'extended' version)
40 
41  // Store the current number in the sequence and use as 'seed' next time
42  *rng_state = (uint)( ((unsigned long)(*rng_state+1u)*279470273u) % 0xfffffffb );
43  // Return as unsigned 32-bit integer
44  return *rng_state;
45 }
46 
62 static float2 lehmer_rand_vec(uint *rng_state)
63 {
64  // Generate two uniform [-0.5,0.5) pseudo-random numbers in a float 2-vector
65  return (float2)( (float)lehmer_rand_uint(rng_state)/(float)0xfffffffb-0.5f,
66  (float)lehmer_rand_uint(rng_state)/(float)0xfffffffb-0.5f);
67 }
static uint lehmer_rand_uint(uint *rng_state)
Generate a Lehmer (linear congruential) integer random variate.
Definition: rng.cl:37
static float2 lehmer_rand_vec(uint *rng_state)
Generate a Lehmer RNG float2 vector random variate .
Definition: rng.cl:62