/// <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(); }
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 }; }