2011-07-28 15 views
2

我正在C++中進行蒙特卡羅模擬,並且我使用了Boost作爲隨機數。我也使用了GSL。但事實證明,隨機數生成是我最大的運行效率低下的一個,所以我只是用好老rand()cstdlib開始。stdlib.h的rand有多糟?

有多差我在冒着有我的可憐的模擬隨機數的屬性?我使用10^6或10^7左右的隨機數字樣本。

+0

你有沒有發佈前請仔細閱讀[*約-rand- *](http://stackoverflow.com/questions/328950/c-the-definitive-truth-about-rand-random-and-arc4random)答案:?)特別是Martin訴Löwis的回答產生了一些細節。一個簡單的谷歌查詢「rand.c期間」顯示在第一頁上。糟糕的實現和選擇10^6的數字保證只有至少32767的範圍不會真的成爲我的第一選擇。這些Mersenne-Twister實現發生了什麼?這不是速度和長時間之間的妥協嗎? – Dilettant

回答

0

這裏有兩個問題:(1)由於RAND_MAX只保證至少爲32767,有可能不是很多可能的值(不一定是壞事對於某些應用),和(2)差的實現。

如果你需要的是被稱爲安全隨機數生成器,你將需要尋找別的地方。但對於許多應用程序,rand()就足夠了。

能夠解決您的問題一個博客帖子是http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx