簡體   English   中英

如何使用rand()創建隨機雙精度數?

[英]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.

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