From c10cf31b47d3b49bc03c6b693c92a42b60807221 Mon Sep 17 00:00:00 2001 From: niart120 <38847256+niart120@users.noreply.github.com> Date: Sat, 18 Dec 2021 00:26:43 +0900 Subject: [PATCH] Create xorshift.py --- src/xorshift.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/xorshift.py diff --git a/src/xorshift.py b/src/xorshift.py new file mode 100644 index 0000000..25ac914 --- /dev/null +++ b/src/xorshift.py @@ -0,0 +1,56 @@ +class Xorshift(object): + def __init__(self,s0,s1,s2,s3): + self.x = s0 + self.y = s1 + self.z = s2 + self.w = s3 + + def next(self): + s0 = self.x + s1 = self.y + s2 = self.z + s3 = self.w + + tmp = s0 ^ s0 << 11 + self.x = s1 + self.y = s2 + self.z = s3 + self.w = t ^ t >>8 ^ s3 ^ s3 >> 19 + + return self.w + + def prev(self): + s0 = self.x + s1 = self.y + s2 = self.z + s3 = self.w + + t = s2 >> 19 ^ s2 ^ s3 + t ^= t >> 8 + t ^= t << 11 + t ^= t << 22 + + self.x = t + self.y = s0 + self.z = s1 + self.w = s2 + + return self.w + + def range(mi,ma): + return self.next() % (ma-mi) + min + + def getNextRandSequence(length): + return [self.next() for _ in range(length)] + + def getPrevRandSequence(length): + return [self.prev() for _ in range(length)] + + def getState(self): + return [self.x, self.y, self.z, self.w] + + def setState(self, s0, s1, s2, s3): + self.x = s0 + self.y = s1 + self.z = s2 + self.w = s3 \ No newline at end of file