[英]How do I create a random double with rand()?
為了產生隨機雙打,有drand48,但是
SVID 3聲明這些函數已過時,該函數聲明應使用rand(3)代替。
如何使用drand48構建隨機雙精度數? 附帶說明一下,隨機浮動?
簡單地將rand()
和int
兩個int
連接起來可能會導致NaN
,這是不可接受的。 我想避免只使用32個隨機位作為雙精度。
不幸的是,在Linux手冊頁中引用了過時的標准。 如果我沒看錯的話,SVID 3於1986年發布,不久就被淘汰了。 POSIX具有此功能家族,尚無計划逐步淘汰它們。
但是,如果您願意,請考慮使用erand48
而不是drand48
。 它的優點是您可以自己為其提供種子狀態。 這樣,它是可重入的,如果在線程環境中使用它(並以不同的方式初始化線程的種子),通常會表現得更好,或者,如果需要用於可重現的仿真,則它具有確定性。
唯一需要注意的一點是,它只為您提供48位偽隨機性。 通常的double
精度算術使用52位,因此請注意不要使用最低的4位,它們並不好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.