7 const float TWOPI = 6.283185307179586;
28 unsigned int b=(((*seed << S1) ^ *seed) >> S2);
29 return *seed = (((*seed & M) << S3) ^ b);
41 unsigned int LCGStep(
unsigned int * seed,
45 return *seed = ( A * *seed + C );
62 unsigned int * seed4 )
65 TausStep( seed1, 13, 19, 12, 4294967294UL )
66 ^
TausStep( seed2, 2, 25, 4, 4294967288UL )
67 ^
TausStep( seed3, 3, 11, 17, 4294967280UL )
68 ^
LCGStep( seed4, 1664525, 1013904223UL);
69 return u*2.3283064365387e-10;
89 unsigned int * seed2 )
91 *seed1 = 36969u * ( *seed1 & 65535u ) + ( *seed1 >> 16 );
92 *seed2 = 18000u * ( *seed2 & 65535u ) + ( *seed2 >> 16 );
93 return (( *seed1 << 16 ) + *seed2 );
110 unsigned int * meta_seed,
113 unsigned int seed1 = meta_seed[0];
114 unsigned int seed2 = meta_seed[1];
115 for (
int i=0;i<n*4;i++){
118 }
while (seeds[i]<128);
120 meta_seed[0] = seed1;
121 meta_seed[1] = seed2;
128 unsigned int * rng_state,
132 for (
int k=0;k<4;k++)
133 seed[k] = rng_state[k*n+i];
140 unsigned int * rng_state,
144 for (
int k=0;k<4;k++)
145 rng_state[k*n+i] = seed[k];
180 template <
typename T>
184 unsigned int * seed )
188 T r = sqrt( -2.0 * log( u0 ));
190 *z1 = r * sin( theta );
191 *z2 = r * cos( theta );