2013-09-25 95 views
5

我一直在尋找一個開發問題,需要使用僞隨機數生成來爲給定的種子生成相同的隨機數集。 我目前一直在尋找使用long random(void)void srandom(unsigned seed)這個(man page),並且目前這些在Mac應用程序,iOS應用程序和iOS應用程序(64位)中生成相同的一組隨機數,這就是我希望。 iOS測試只在模擬器中,所以我不知道這是否會影響結果。隨機()會改變嗎?

我的主要擔憂是該算法可能會在某些時候發生變化,使得我們正在開發的應用程序對舊數據無效。 這些算法在未來的設備上改變/不同的機會有多大?

+0

任何人討論RNGs總是帶來這個經典的迪爾伯特帶腦... http://dilbert.com/strips/comic/2001-10-25/ //題外話題:我認爲@Bathsheba是現貨:) – Luke

+0

他們可能不會改變,因爲它們可能有很多依賴關係。但是沒有保證。 –

回答

6

我會說這是非常可能他們會隨着序列沒有任何標準的保證。

爲什麼不使用自己的隨機數字序列?即使是一個簡單的線性同餘發生器也能滿足大多數隨機性的統計特性。下面是這種發電機的公式:

next_number = (a * current_number + b) % c 

a = 1103515245 
b = 12345 
c = 4294967296 

A,B的這些值,C給你很好的統計特性,併爲構建快速和骯髒的發電機是頗有名氣。

2

我對你問的問題的答案沒有絲毫的想法。

如果一個相關的問題是「我怎樣才能絕對確保在10年內產生相同的僞隨機序列?」,這個問題的答案是:不要依賴外部庫,寫代碼明確。

拔示巴建議this generator。你可以谷歌的「僞隨機生成器算法」。以下是在wikipedia上列出的算法列表。

+0

對於包含a,b和c的其他值的鏈接+1(我的符號) – Bathsheba

0

事實上,根據this blog post,自從Mac OS X 10.7以來,srandom確實發生了變化。但是,這是由於srandom的實現方式造成的 :它試圖訪問未初始化的局部變量,其中 是未定義的行爲C.根據帖子,自MacOS X 10.7以來使用的新編譯器優化了未初始化的內存訪問,以微妙的 方式改變其行爲。

+0

它不是隨機數生成器函數'srandom'發生了變化,而是種子函數'srandomdev'。由於OP使用固定種子「srandom」可能仍會產生相同的僞隨機值。當然,這並不會改變「srandom' *可能隨時改變的事實。 –