MCPcopy Create free account
hub / github.com/JeanLucPons/VanitySearch / rk_random

Function rk_random

Random.cpp:62–95  ·  view source on GitHub ↗

Slightly optimised reference implementation of the Mersenne Twister */

Source from the content-addressed store, hash-verified

60
61/* Slightly optimised reference implementation of the Mersenne Twister */
62inline unsigned long rk_random(rk_state *state)
63{
64 unsigned long y;
65
66 if (state->pos == RK_STATE_LEN)
67 {
68 int i;
69
70 for (i=0;i<N-M;i++)
71 {
72 y = (state->key[i] & UPPER_MASK) | (state->key[i+1] & LOWER_MASK);
73 state->key[i] = state->key[i+M] ^ (y>>1) ^ (-(y & 1) & MATRIX_A);
74 }
75 for (;i<N-1;i++)
76 {
77 y = (state->key[i] & UPPER_MASK) | (state->key[i+1] & LOWER_MASK);
78 state->key[i] = state->key[i+(M-N)] ^ (y>>1) ^ (-(y & 1) & MATRIX_A);
79 }
80 y = (state->key[N-1] & UPPER_MASK) | (state->key[0] & LOWER_MASK);
81 state->key[N-1] = state->key[M-1] ^ (y>>1) ^ (-(y & 1) & MATRIX_A);
82
83 state->pos = 0;
84 }
85
86 y = state->key[state->pos++];
87
88 /* Tempering */
89 y ^= (y >> 11);
90 y ^= (y << 7) & 0x9d2c5680UL;
91 y ^= (y << 15) & 0xefc60000UL;
92 y ^= (y >> 18);
93
94 return y;
95}
96
97inline double rk_double(rk_state *state)
98{

Callers 2

rk_doubleFunction · 0.85
rndlFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected