2012-09-05 52 views
0

爲了產生隨機雙打,有drand48,但如何用rand()創建一個隨機double?

這些功能由SVID 3,其中指出 蘭特(3)應使用聲明過時。

如何用drand48構造我的隨機雙?在旁註中, 隨機浮動?

簡單地連接兩個intrand()和鑄造可能導致 NaN,這是不可接受的。我想避免只使用32位隨機 位的雙。

+3

[This might help。](http://stackoverflow.com/questions/1340729/how-do-you-generate-a-random-double-uniformly-distributed-between-0-and-1-from- C) – 2012-09-05 20:59:32

回答

4

這引用了linux手冊頁中過時的標準是不幸的。如果我看到正確的SVID 3是1986年出版的,並且已經過時了很久。 POSIX有這個功能系列,並沒有計劃將它們逐步淘汰。

但是,如果你在它,考慮使用erand48,而不是drand48。它的優點是你自己提供一個種子狀態。由於它是可重入的,如果你在一個線程環境中使用它(通過不同的方式初始化線程的種子),通常表現會更好,或者如果你需要它來進行可重複的模擬,它就是確定性的。

唯一的小問題是你必須記住的是它只給你48位的僞隨機性。算術是用52位算的,所以要小心不要用最低的4位,它們不好。