如何使用 rand() 创建随机双精度数?

Rea*_*onk 0 c random double

为了生成随机双精度数,有 drand48,但是

这些函数被 SVID 3 声明为过时,其中规定应使用 rand(3) 代替。

如何使用 drand48 构建随机双精度?顺便说一句,随机浮动?

简单地连接两个intfromrand()并进行强制转换可能会导致 NaN,这是不可接受的。我想避免仅使用 32 个随机位作为双精度数。

Jen*_*edt 5

Linux 手册页中对过时标准的引用是不幸的。如果我没看错的话,SVID 3 于 1986 年发布,并且已经过时很久了。POSIX 具有这一系列功能,并且没有计划逐步淘汰它们。

但如果您愿意,请考虑使用erand48而不是drand48. 它的优点是您可以自己为其提供种子状态。因此,它是可重入的,如果您在线程环境中使用它(并以不同的方式初始化线程的种子),通常会表现得更好,或者如果您需要它进行可重现的模拟,则它是确定性的。

唯一需要注意的是,它只提供 48 位伪随机性。通常的double算术都是52位的,所以要小心不要使用最低的4位,它们是没有用的。