2016-08-29 61 views
0

我寫一個播種在PRNG客觀-C可能在Objective-C中保存種子PRNG嗎?

srandom(seed); 

I'n C#我可以保存PRNG走在一個變量:

prng = new Random(seed); 

這是可能的在Objective-C以及?

我想將PRNG保存在一個變量中的原因在於,希望立即或稍後生成的數字具有確定性結果。我不想冒另一個功能重用PRNG的風險。

我試圖做一些研究,例如閱讀本文列出不同的庫:http://nshipster.com/random/,但我還沒有找到任何東西。

回答

0

使用下面的代碼它可以幫助您節省隨機數:

unsigned int seed = 13; /* Choose value for the seed */ 
    int random; 

    srand(seed);    /* Set the seed       */ 
    random = rand();   /* Generate a random number    */ 

使用函數srand設置seed,然後用蘭特()

Hopw它會幫助你。如果您的問題得到解決,請告訴我。

+0

我想在後面保存種子PRNG,以便即使其他函數在其間生成隨機數字,也不會影響種子PRNG。 – user1283776

+0

然後取int隨機;作爲全局變量,並檢查它是零然後生成PRNG,否則使用它。 –

1

在C中,srand()和rand()與對象無關,就像在C#中一樣。 srand()只是設置一個全局變量,而rand()從中讀取它。據我所知,Objective-C使用這個庫的原始C實現。由於沒有涉及任何對象,因此每次調用功能rand()將始終訪問由srand()設置的相同PRNG種子。

雖然這並不意味着沒有任何解決方案。首先(也許不是最好的解決方案)是將自己的PRNG作爲對象編寫。另一個選擇是找到一個面向對象的PRNG庫(我通常不在Objective-C中編寫代碼,所以我沒有任何建議)。最後,您可以遵循rand()通常使用的標準,並且只在程序開始時調用srand()一次,如果這適合您的應用程序。

1

GameplayKit Foundation圖書館提供的課程GKMersenneTwisterRandomSource。您可以使用initWithSeed:創建獨立播種的多個實例,並將它們傳遞給您的內容。

+0

看起來很完美!你能幫我解釋一下剩下的細節嗎?當我輸入(at)導入GameplayKit;我收到一條錯誤消息:禁用模塊時使用(at)導入。是否有可能用#import語句導入這個庫? – user1283776

+0

不能幫助你,我從Swift中使用它。 – pjs