private void setSeedInternal()

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
    }