in commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/MersenneTwister64.java [127:159]
private void setSeedInternal(long[] inputSeed) {
// Accept empty seed.
final long[] seed = (inputSeed.length == 0) ? new long[1] : inputSeed;
initState(19650218L);
int i = 1;
int j = 0;
for (int k = Math.max(NN, seed.length); k != 0; k--) {
final long mm1 = mt[i - 1];
mt[i] = (mt[i] ^ ((mm1 ^ (mm1 >>> 62)) * 0x369dea0f31a53f85L)) + seed[j] + j; // non linear
i++;
j++;
if (i >= NN) {
mt[0] = mt[NN - 1];
i = 1;
}
if (j >= seed.length) {
j = 0;
}
}
for (int k = NN - 1; k != 0; k--) {
final long mm1 = mt[i - 1];
mt[i] = (mt[i] ^ ((mm1 ^ (mm1 >>> 62)) * 0x27bb2ee687b0b0fdL)) - i; // non linear
i++;
if (i >= NN) {
mt[0] = mt[NN - 1];
i = 1;
}
}
mt[0] = 0x8000000000000000L; // MSB is 1; assuring non-zero initial array
}