⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mersennetwisterfast.java

📁 java 写的一个新闻发布系统
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        {        int y;                if (mti >= N)   // generate N words at one time            {            int kk;                        for (kk = 0; kk < N - M; kk++)                {                y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                mt[kk] = mt[kk+M] ^ (y >>> 1) ^ mag01[y & 0x1];                }            for (; kk < N-1; kk++)                {                y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                mt[kk] = mt[kk+(M-N)] ^ (y >>> 1) ^ mag01[y & 0x1];                }            y = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);            mt[N-1] = mt[M-1] ^ (y >>> 1) ^ mag01[y & 0x1];            mti = 0;            }          y = mt[mti++];        y ^= y >>> 11;                          // TEMPERING_SHIFT_U(y)        y ^= (y << 7) & TEMPERING_MASK_B;       // TEMPERING_SHIFT_S(y)        y ^= (y << 15) & TEMPERING_MASK_C;      // TEMPERING_SHIFT_T(y)        y ^= (y >>> 18);                        // TEMPERING_SHIFT_L(y)        return (byte)(y >>> 24);        }    public final void nextBytes(byte[] bytes)        {        int y;                for (int x=0;x<bytes.length;x++)            {            if (mti >= N)   // generate N words at one time                {                int kk;                                for (kk = 0; kk < N - M; kk++)                    {                    y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                    mt[kk] = mt[kk+M] ^ (y >>> 1) ^ mag01[y & 0x1];                    }                for (; kk < N-1; kk++)                    {                    y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                    mt[kk] = mt[kk+(M-N)] ^ (y >>> 1) ^ mag01[y & 0x1];                    }                y = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);                mt[N-1] = mt[M-1] ^ (y >>> 1) ^ mag01[y & 0x1];                                mti = 0;                }                        y = mt[mti++];            y ^= y >>> 11;                          // TEMPERING_SHIFT_U(y)            y ^= (y << 7) & TEMPERING_MASK_B;       // TEMPERING_SHIFT_S(y)            y ^= (y << 15) & TEMPERING_MASK_C;      // TEMPERING_SHIFT_T(y)            y ^= (y >>> 18);                        // TEMPERING_SHIFT_L(y)            bytes[x] = (byte)(y >>> 24);            }        }    public final long nextLong()        {        int y;        int z;        if (mti >= N)   // generate N words at one time            {            int kk;                        for (kk = 0; kk < N - M; kk++)                {                y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                mt[kk] = mt[kk+M] ^ (y >>> 1) ^ mag01[y & 0x1];                }            for (; kk < N-1; kk++)                {                y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                mt[kk] = mt[kk+(M-N)] ^ (y >>> 1) ^ mag01[y & 0x1];                }            y = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);            mt[N-1] = mt[M-1] ^ (y >>> 1) ^ mag01[y & 0x1];            mti = 0;            }          y = mt[mti++];        y ^= y >>> 11;                          // TEMPERING_SHIFT_U(y)        y ^= (y << 7) & TEMPERING_MASK_B;       // TEMPERING_SHIFT_S(y)        y ^= (y << 15) & TEMPERING_MASK_C;      // TEMPERING_SHIFT_T(y)        y ^= (y >>> 18);                        // TEMPERING_SHIFT_L(y)        if (mti >= N)   // generate N words at one time            {            int kk;                        for (kk = 0; kk < N - M; kk++)                {                z = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                mt[kk] = mt[kk+M] ^ (z >>> 1) ^ mag01[z & 0x1];                }            for (; kk < N-1; kk++)                {                z = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                mt[kk] = mt[kk+(M-N)] ^ (z >>> 1) ^ mag01[z & 0x1];                }            z = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);            mt[N-1] = mt[M-1] ^ (z >>> 1) ^ mag01[z & 0x1];                        mti = 0;            }                z = mt[mti++];        z ^= z >>> 11;                          // TEMPERING_SHIFT_U(z)        z ^= (z << 7) & TEMPERING_MASK_B;       // TEMPERING_SHIFT_S(z)        z ^= (z << 15) & TEMPERING_MASK_C;      // TEMPERING_SHIFT_T(z)        z ^= (z >>> 18);                        // TEMPERING_SHIFT_L(z)                return (((long)y) << 32) + (long)z;        }    public final double nextDouble()        {        int y;        int z;        if (mti >= N)   // generate N words at one time            {            int kk;                        for (kk = 0; kk < N - M; kk++)                {                y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                mt[kk] = mt[kk+M] ^ (y >>> 1) ^ mag01[y & 0x1];                }            for (; kk < N-1; kk++)                {                y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                mt[kk] = mt[kk+(M-N)] ^ (y >>> 1) ^ mag01[y & 0x1];                }            y = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);            mt[N-1] = mt[M-1] ^ (y >>> 1) ^ mag01[y & 0x1];            mti = 0;            }          y = mt[mti++];        y ^= y >>> 11;                          // TEMPERING_SHIFT_U(y)        y ^= (y << 7) & TEMPERING_MASK_B;       // TEMPERING_SHIFT_S(y)        y ^= (y << 15) & TEMPERING_MASK_C;      // TEMPERING_SHIFT_T(y)        y ^= (y >>> 18);                        // TEMPERING_SHIFT_L(y)        if (mti >= N)   // generate N words at one time            {            int kk;                        for (kk = 0; kk < N - M; kk++)                {                z = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                mt[kk] = mt[kk+M] ^ (z >>> 1) ^ mag01[z & 0x1];                }            for (; kk < N-1; kk++)                {                z = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                mt[kk] = mt[kk+(M-N)] ^ (z >>> 1) ^ mag01[z & 0x1];                }            z = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);            mt[N-1] = mt[M-1] ^ (z >>> 1) ^ mag01[z & 0x1];                        mti = 0;            }                z = mt[mti++];        z ^= z >>> 11;                          // TEMPERING_SHIFT_U(z)        z ^= (z << 7) & TEMPERING_MASK_B;       // TEMPERING_SHIFT_S(z)        z ^= (z << 15) & TEMPERING_MASK_C;      // TEMPERING_SHIFT_T(z)        z ^= (z >>> 18);                        // TEMPERING_SHIFT_L(z)                /* derived from nextDouble documentation in jdk 1.2 docs, see top */        return ((((long)(y >>> 6)) << 27) + (z >>> 5)) / (double)(1L << 53);        }    public final double nextGaussian()        {        if (haveNextNextGaussian)            {            haveNextNextGaussian = false;            return nextNextGaussian;            }         else             {            double v1, v2, s;            do                 {                 int y;                int z;                int a;                int b;                                        if (mti >= N)   // generate N words at one time                        {                        int kk;                                                for (kk = 0; kk < N - M; kk++)                            {                            y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                            mt[kk] = mt[kk+M] ^ (y >>> 1) ^ mag01[y & 0x1];                            }                        for (; kk < N-1; kk++)                            {                            y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                            mt[kk] = mt[kk+(M-N)] ^ (y >>> 1) ^ mag01[y & 0x1];                            }                        y = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);                        mt[N-1] = mt[M-1] ^ (y >>> 1) ^ mag01[y & 0x1];                                                mti = 0;                        }                                y = mt[mti++];                y ^= y >>> 11;                          // TEMPERING_SHIFT_U(y)                y ^= (y << 7) & TEMPERING_MASK_B;       // TEMPERING_SHIFT_S(y)                y ^= (y << 15) & TEMPERING_MASK_C;      // TEMPERING_SHIFT_T(y)                y ^= (y >>> 18);                        // TEMPERING_SHIFT_L(y)                                if (mti >= N)   // generate N words at one time                    {                    int kk;                                        for (kk = 0; kk < N - M; kk++)                        {                        z = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                        mt[kk] = mt[kk+M] ^ (z >>> 1) ^ mag01[z & 0x1];                        }                    for (; kk < N-1; kk++)                        {                        z = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                        mt[kk] = mt[kk+(M-N)] ^ (z >>> 1) ^ mag01[z & 0x1];                        }                    z = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);                    mt[N-1] = mt[M-1] ^ (z >>> 1) ^ mag01[z & 0x1];                                        mti = 0;                    }                                z = mt[mti++];                z ^= z >>> 11;                          // TEMPERING_SHIFT_U(z)                z ^= (z << 7) & TEMPERING_MASK_B;       // TEMPERING_SHIFT_S(z)                z ^= (z << 15) & TEMPERING_MASK_C;      // TEMPERING_SHIFT_T(z)                z ^= (z >>> 18);                        // TEMPERING_SHIFT_L(z)                                if (mti >= N)   // generate N words at one time                    {                    int kk;                                        for (kk = 0; kk < N - M; kk++)                        {                        a = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                        mt[kk] = mt[kk+M] ^ (a >>> 1) ^ mag01[a & 0x1];                        }                    for (; kk < N-1; kk++)                        {                        a = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                        mt[kk] = mt[kk+(M-N)] ^ (a >>> 1) ^ mag01[a & 0x1];                        }                    a = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);                    mt[N-1] = mt[M-1] ^ (a >>> 1) ^ mag01[a & 0x1];                                        mti = 0;                    }                                a = mt[mti++];                a ^= a >>> 11;                          // TEMPERING_SHIFT_U(a)                a ^= (a << 7) & TEMPERING_MASK_B;       // TEMPERING_SHIFT_S(a)                a ^= (a << 15) & TEMPERING_MASK_C;      // TEMPERING_SHIFT_T(a)                a ^= (a >>> 18);                        // TEMPERING_SHIFT_L(a)                                if (mti >= N)   // generate N words at one time                    {                    int kk;                                        for (kk = 0; kk < N - M; kk++)                        {                        b = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                        mt[kk] = mt[kk+M] ^ (b >>> 1) ^ mag01[b & 0x1];                        }                    for (; kk < N-1; kk++)                        {                        b = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);                        mt[kk] = mt[kk+(M-N)] ^ (b >>> 1) ^ mag01[b & 0x1];                        }                    b = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);                    mt[N-1] = mt[M-1] ^ (b >>> 1) ^ mag01[b & 0x1];                                        mti = 0;                    }                                b = mt[mti++];                b ^= b >>> 11;                          // TEMPERING_SHIFT_U(b)                b ^= (b << 7) & TEMPERING_MASK_B;       // TEMPERING_SHIFT_S(b)                b ^= (b << 15) & TEMPERING_MASK_C;      // TEMPERING_SHIFT_T(b)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -