簡體   English   中英

使用rand()在C語言中生成不相關的數字

[英]generate uncorrelated number in the C language using rand()

我想生成不相關的隨機數來進行模擬......但是, C languagerand()函數生成的數字是相關的。
有沒有可能使用rand()函數並生成多個隨機流?
我的意思是,如果rand()函數為我生成一系列相關數字,我可以將這個系列剪切成不同的流。 然后獨立使用這些流?

謝謝

你確實是對的。 它們通常是自相關的,因為正常的生成器實現是線性同余的 (盡管C標准沒有強制要求)。 因此,連續數字的xy圖將無法進行隨機2D色散的卡方檢驗。

根據你的應用,你可以看看Bays-Durham shuffle,據我所知,它通過了隨機性的死硬測試:它的目的是打敗自相關效應。

我將您引導至www.nr.com進行實施,特別是rand1rand2功能。 更現代的方法是使用mersenne twister方案,但實現一點點試圖(順便說一句,C ++ 11將此生成器作為其標准庫的一部分)。

如果你的C實現有rand_r ,你可以試試。 它允許您指定存儲狀態的位置。

或者只使用您自己的偽隨機數生成器。

您可以使用arc4random或更好的ar4random_uniform來增加生成值的隨機性(實際上ar4random_uniform證明了統一分布的值)。

在計算機上生成真正的隨機數是不可能的,您只能生成“偽隨機”數字,即“看起來像”隨機的數字。

通常會使用具有足夠熵的“種子”(小比特序列)然后通過偽隨機數生成器 “擴展”它。

C rand()函數產生低質量的隨機性,嘗試在其他答案/評論中提出的PRNG。 一些例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM