Skip to content

Instantly share code, notes, and snippets.

@globby
Created March 5, 2014 03:57
Show Gist options
  • Save globby/9360891 to your computer and use it in GitHub Desktop.
Save globby/9360891 to your computer and use it in GitHub Desktop.
An implementation of the Mersenne Twister Pseudorandom Generator
class MersenneTwister(object):
def __init__(self,seed):
self.MT = range(624)
self.index = 0
self.initialize(seed)
def last32(self,num):
return int(bin(num)[-32:],2)
def initialize(self,seed):
self.index = 0
self.MT[0] = seed
for i in range(1,623):
last = self.MT[i-1]
self.MT[i] = self.last32(1812433253 * (last ^ (last >> 30)) + i)
def extract(self):
if self.index == 0:
self.generate()
y = self.MT[self.index]
y ^= y >> 11
y ^= y << 7 & 2636928640
y ^= y << 15 & 4022730752
y ^= y >> 18
self.index = (self.index + 1) % 624
return y
def generate(self):
for i in range(0,623):
y = (self.MT[i] & 0x80000000) + (self.MT[(i+1)%624] & 0x7fffffff)
self.MT[i] = self.MT[(i + 397) % 624] ^ (y >> 1)
if y % 2 != 0:
self.MT[i] ^= 2567483615
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment