[英]generate uncorrelated number in the C language using rand()
我想生成不相關的隨機數來進行模擬......但是, C language
中rand()
函數生成的數字是相關的。
有沒有可能使用rand()
函數並生成多個隨機流?
我的意思是,如果rand()
函數為我生成一系列相關數字,我可以將這個系列剪切成不同的流。 然后獨立使用這些流?
謝謝
你確實是對的。 它們通常是自相關的,因為正常的生成器實現是線性同余的 (盡管C標准沒有強制要求)。 因此,連續數字的xy圖將無法進行隨機2D色散的卡方檢驗。
根據你的應用,你可以看看Bays-Durham shuffle,據我所知,它通過了隨機性的死硬測試:它的目的是打敗自相關效應。
我將您引導至www.nr.com進行實施,特別是rand1
, rand2
功能。 更現代的方法是使用mersenne twister方案,但實現一點點試圖(順便說一句,C ++ 11將此生成器作為其標准庫的一部分)。
如果你的C實現有rand_r ,你可以試試。 它允許您指定存儲狀態的位置。
或者只使用您自己的偽隨機數生成器。
您可以使用arc4random
或更好的ar4random_uniform
來增加生成值的隨機性(實際上ar4random_uniform
證明了統一分布的值)。
在計算機上生成真正的隨機數是不可能的,您只能生成“偽隨機”數字,即“看起來像”隨機的數字。
通常會使用具有足夠熵的“種子”(小比特序列)然后通過偽隨機數生成器 “擴展”它。
C rand()
函數產生低質量的隨機性,嘗試在其他答案/評論中提出的PRNG。 一些例子 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.