下面是一個基本實現Xorshift RNG的(從維基百科複製):在Xorshift隨機數生成算法
uint32_t xor128(void) {
static uint32_t x = 123456789;
static uint32_t y = 362436069;
static uint32_t z = 521288629;
static uint32_t w = 88675123;
uint32_t t;
t = x^(x << 11);
x = y; y = z; z = w;
return w = w^(w >> 19)^(t^(t >> 8));
}
我明白w
是返回值和x
,y
和z
是國家( 「內存」)變量。但是,我無法理解多個內存變量的用途。任何人都可以解釋我這點嗎?
另外,我試圖複製上面的代碼到Python:
class R2:
def __init__(self):
self.x = x = 123456789
self.y = 362436069
self.z = 521288629
self.w = 88675123
def __call__(self):
t = self.x^(self.x<<11)
self.x = self.y
self.y = self.z
self.z = self.w
w = self.w
self.w = w^(w >> 19) ^(t^(t >> 8))
return self.w
然後,我已經生成100個號碼,並繪製其log10
值:
r2 = R2()
x2 = [math.log10(r2()) for _ in range(100)]
plot(x2, '.g')
這裏是圖的輸出:
和TH是10000(而不是100)數字生成時發生的情況:
整體趨勢非常明顯。並且不要忘記Y軸是實際值的log10
。
很奇怪的行爲,你不覺得嗎?
的日誌10輸出應該已經是你的線索,最高32位的日誌10是9.something,而不是100。 – 2010-12-22 11:52:51