Example #1
0
        /// <summary>
        /// Initializes the generator.
        /// </summary>
        /// <param name="seed">Seed of the generator</param>
        /// <param name="init">Settings of the Mersenne twister. The default value is
        /// MT19937.</param>
        public UDEMersenneRandom(uint?seed = null, MersenneRandomInit?init = null)
        {
            if (!init.HasValue)
            {
                this.init = DEFAULT;
            }
            else
            {
                this.init = init.Value;
            }

            if (!seed.HasValue)
            {
                this.seed =
                    (uint)System.DateTime.UtcNow.Millisecond
                    * (uint)Thread.CurrentThread.ManagedThreadId
                    * (uint)Process.GetCurrentProcess().Id;
            }
            else
            {
                this.seed = seed.Value;
            }

            mt        = new uint[this.init.n];
            index     = this.init.n + 1;
            lowerMask = (1u << this.init.r) - 1;
            upperMask = ~lowerMask;

            SeedMT();
        }
Example #2
0
 static UDEMersenneRandom()
 {
     DEFAULT = new MersenneRandomInit()
     {
         n = 624,
         m = 397,
         r = 31,
         a = 0x9908b0df,
         b = 0x9d2c5680,
         c = 0xefc60000,
         s = 7,
         t = 15,
         u = 11,
         d = 0xffffffff,
         l = 18,
         f = 1812433253u
     };
 }