Ejemplo n.º 1
0
        /// <summary>
        /// 指定したシード値を使用し、指定されたフラグに基づく周期の<see cref="SimdOrientedFastMersenneTwister"/> classの新しいインスタンスを初期化します
        /// </summary>
        /// <param name="seed">擬似乱数系列の開始値を計算するために使用する数値。負数を指定した場合、その数値の絶対値が使用されます。</param>
        /// <param name="period">周期を表すフラグ</param>
        public SimdOrientedFastMersenneTwister(int seed, MTPeriodType period)
        {
            if (!Enum.IsDefined(typeof(MTPeriodType), period))
            {
                throw new ArgumentOutOfRangeException();
            }

            MersenneTwisterDetail data = s_Details[period].Invoke();

            m_MEXP    = data.m_mexp;
            m_POS1    = data.m_POS1;
            m_SL1     = data.m_SL1;
            m_SL2     = data.m_SL2;
            m_SR1     = data.m_SR1;
            m_SR2     = data.m_SR2;
            m_MSK1    = data.m_MSK1;
            m_MSK2    = data.m_MSK2;
            m_MSK3    = data.m_MSK3;
            m_MSK4    = data.m_MSK4;
            m_PARITY1 = data.m_PARITY1;
            m_PARITY2 = data.m_PARITY2;
            m_PARITY3 = data.m_PARITY3;
            m_PARITY4 = data.m_PARITY4;
            InitializeGenerateRand(seed);
        }
        public static MersenneTwisterDetail MT4253()
        {
            var result = new MersenneTwisterDetail();

            result.m_mexp    = 4253;
            result.m_POS1    = 17;
            result.m_SL1     = 20;
            result.m_SL2     = 1;
            result.m_SR1     = 7;
            result.m_SR2     = 1;
            result.m_MSK1    = 0x9f7bffffU;
            result.m_MSK2    = 0x9fffff5fU;
            result.m_MSK3    = 0x3efffffbU;
            result.m_MSK4    = 0xfffff7bbU;
            result.m_PARITY1 = 0xa8000001U;
            result.m_PARITY2 = 0xaf5390a3U;
            result.m_PARITY3 = 0xb740b3f8U;
            result.m_PARITY4 = 0x6c11486dU;
            return(result);
        }
        public static MersenneTwisterDetail MT2281()
        {
            var result = new MersenneTwisterDetail();

            result.m_mexp    = 2281;
            result.m_POS1    = 12;
            result.m_SL1     = 19;
            result.m_SL2     = 1;
            result.m_SR1     = 5;
            result.m_SR2     = 1;
            result.m_MSK1    = 0xbff7ffbfU;
            result.m_MSK2    = 0xfdfffffeU;
            result.m_MSK3    = 0xf7ffef7fU;
            result.m_MSK4    = 0xf2f7cbbfU;
            result.m_PARITY1 = 0x00000001U;
            result.m_PARITY2 = 0x00000000U;
            result.m_PARITY3 = 0x00000000U;
            result.m_PARITY4 = 0x41dfa600U;
            return(result);
        }
        public static MersenneTwisterDetail MT1279()
        {
            var result = new MersenneTwisterDetail();

            result.m_mexp    = 1279;
            result.m_POS1    = 7;
            result.m_SL1     = 14;
            result.m_SL2     = 3;
            result.m_SR1     = 5;
            result.m_SR2     = 1;
            result.m_MSK1    = 0xf7fefffdU;
            result.m_MSK2    = 0x7fefcfffU;
            result.m_MSK3    = 0xaff3ef3fU;
            result.m_MSK4    = 0xb5ffff7fU;
            result.m_PARITY1 = 0x00000001U;
            result.m_PARITY2 = 0x00000000U;
            result.m_PARITY3 = 0x00000000U;
            result.m_PARITY4 = 0x20000000U;
            return(result);
        }
        public static MersenneTwisterDetail MT607()
        {
            var result = new MersenneTwisterDetail();

            result.m_mexp    = 607;
            result.m_POS1    = 2;
            result.m_SL1     = 15;
            result.m_SL2     = 3;
            result.m_SR1     = 13;
            result.m_SR2     = 3;
            result.m_MSK1    = 0xfdff37ffU;
            result.m_MSK2    = 0xef7f3f7dU;
            result.m_MSK3    = 0xff777b7dU;
            result.m_MSK4    = 0x7ff7fb2fU;
            result.m_PARITY1 = 0x00000001U;
            result.m_PARITY2 = 0x00000000U;
            result.m_PARITY3 = 0x00000000U;
            result.m_PARITY4 = 0x5986f054U;
            return(result);
        }
        public static MersenneTwisterDetail MT216091()
        {
            var result = new MersenneTwisterDetail();

            result.m_mexp    = 216091;
            result.m_POS1    = 627;
            result.m_SL1     = 11;
            result.m_SL2     = 3;
            result.m_SR1     = 10;
            result.m_SR2     = 1;
            result.m_MSK1    = 0xbff7bff7U;
            result.m_MSK2    = 0xbfffffffU;
            result.m_MSK3    = 0xbffffa7fU;
            result.m_MSK4    = 0xffddfbfbU;
            result.m_PARITY1 = 0xf8000001U;
            result.m_PARITY2 = 0x89e80709U;
            result.m_PARITY3 = 0x3bd2b64bU;
            result.m_PARITY4 = 0x0c64b1e4U;
            return(result);
        }
        public static MersenneTwisterDetail MT132049()
        {
            var result = new MersenneTwisterDetail();

            result.m_mexp    = 132049;
            result.m_POS1    = 110;
            result.m_SL1     = 19;
            result.m_SL2     = 1;
            result.m_SR1     = 21;
            result.m_SR2     = 1;
            result.m_MSK1    = 0xffffbb5fU;
            result.m_MSK2    = 0xfb6ebf95U;
            result.m_MSK3    = 0xfffefffaU;
            result.m_MSK4    = 0xcff77fffU;
            result.m_PARITY1 = 0x00000001U;
            result.m_PARITY2 = 0x00000000U;
            result.m_PARITY3 = 0xcb520000U;
            result.m_PARITY4 = 0xc7e91c7dU;
            return(result);
        }
        public static MersenneTwisterDetail MT86243()
        {
            var result = new MersenneTwisterDetail();

            result.m_mexp    = 86243;
            result.m_POS1    = 366;
            result.m_SL1     = 6;
            result.m_SL2     = 7;
            result.m_SR1     = 19;
            result.m_SR2     = 1;
            result.m_MSK1    = 0xfdbffbffU;
            result.m_MSK2    = 0xbff7ff3fU;
            result.m_MSK3    = 0xfd77efffU;
            result.m_MSK4    = 0xbf9ff3ffU;
            result.m_PARITY1 = 0x00000001U;
            result.m_PARITY2 = 0x00000000U;
            result.m_PARITY3 = 0x00000000U;
            result.m_PARITY4 = 0xe9528d85U;
            return(result);
        }
        public static MersenneTwisterDetail MT44497()
        {
            var result = new MersenneTwisterDetail();

            result.m_mexp    = 44497;
            result.m_POS1    = 330;
            result.m_SL1     = 5;
            result.m_SL2     = 3;
            result.m_SR1     = 9;
            result.m_SR2     = 3;
            result.m_MSK1    = 0xeffffffbU;
            result.m_MSK2    = 0xdfbebfffU;
            result.m_MSK3    = 0xbfbf7befU;
            result.m_MSK4    = 0x9ffd7bffU;
            result.m_PARITY1 = 0x00000001U;
            result.m_PARITY2 = 0x00000000U;
            result.m_PARITY3 = 0xa3ac4000U;
            result.m_PARITY4 = 0xecc1327aU;
            return(result);
        }
        public static MersenneTwisterDetail MT11213()
        {
            var result = new MersenneTwisterDetail();

            result.m_mexp    = 11213;
            result.m_POS1    = 68;
            result.m_SL1     = 14;
            result.m_SL2     = 3;
            result.m_SR1     = 7;
            result.m_SR2     = 3;
            result.m_MSK1    = 0xeffff7fbU;
            result.m_MSK2    = 0xffffffefU;
            result.m_MSK3    = 0xdfdfbfffU;
            result.m_MSK4    = 0x7fffdbfdU;
            result.m_PARITY1 = 0x00000001U;
            result.m_PARITY2 = 0x00000000U;
            result.m_PARITY3 = 0xe8148000U;
            result.m_PARITY4 = 0xd0c7afa3U;
            return(result);
        }
        public static MersenneTwisterDetail MT19937()
        {
            var result = new MersenneTwisterDetail();

            result.m_mexp    = 19937;
            result.m_POS1    = 122;
            result.m_SL1     = 18;
            result.m_SL2     = 1;
            result.m_SR1     = 11;
            result.m_SR2     = 1;
            result.m_MSK1    = 0xdfffffefU;
            result.m_MSK2    = 0xddfecb7fU;
            result.m_MSK3    = 0xbffaffffU;
            result.m_MSK4    = 0xbffffff6U;
            result.m_PARITY1 = 0x00000001U;
            result.m_PARITY2 = 0x00000000U;
            result.m_PARITY3 = 0x00000000U;
            result.m_PARITY4 = 0x13c9e684U;
            result.m_PARITY4 = 0x20000000U;
            return(result);
        }