實際的答案是它取決於生成器的實現,這在標準中沒有定義。甚至對於線性同餘發生器(LCG)也是如此,LCG通常用作rand
的默認實現。
一個LCG是形式
state = (A * state + B) % M
合適整數值常量A
,B
,和M
復發關係。設置種子初始化state
。
的A
,B
和M
一些選擇,就不會達到充分循環(相對於模量M
),在這種情況下,可以LCG產生兩個或多個非重疊的子序列。例如,對於A = 3
,B = 0
和M = 11
,您將根據您的種子值發現自己處於兩個不重疊的子循環之一。 播種1將產生以下序列:
3,9,5,4,1,3,9,5,4,1,3,9...
和播種2將產生:
6,7,10,8,2,6,7,10,8,2,6,7...
係數的其它選擇可以實現充分循環。在任何一種情況下,種子值都對應於選擇一個循環或子循環的入口點。
對於維持較大狀態空間並摺疊狀態以產生每個報告值的其他類生成器,您可以重複單個值而不重複相同的序列,直到您列舉了整個(不可見)狀態空間。這就是Mersenne Twister等發電機如何實現週期長度的原因,如2 -1。不同的(非常大的)狀態可以摺疊爲相同的32位或64位數量,但對於下一個值將導致完全不同的狀態被計算(和摺疊),因此您將看到重複的單個值而不會看到重複一系列值。
來源
2015-09-23 20:21:38
pjs
這取決於。 PRNG可以形成一個或多個週期。如果0和1在同一個循環中,那麼是的,你最終會看到你用'srand(1)''srand(0)'得到的序列。實際上,兩個序列都是一樣的,但是有一些變化。另一方面,如果他們處於不同的週期,你將不會看到任何共同的數字。 – rlbond
這不是由標準定義的。 – Olaf