为了生成随机双精度数,有 drand48,但是
这些函数被 SVID 3 声明为过时,其中规定应使用 rand(3) 代替。
如何使用 drand48 构建随机双精度?顺便说一句,随机浮动?
简单地连接两个int
fromrand()
并进行强制转换可能会导致
NaN
,这是不可接受的。我想避免仅使用 32 个随机位作为双精度数。
Linux 手册页中对过时标准的引用是不幸的。如果我没看错的话,SVID 3 于 1986 年发布,并且已经过时很久了。POSIX 具有这一系列功能,并且没有计划逐步淘汰它们。
但如果您愿意,请考虑使用erand48
而不是drand48
. 它的优点是您可以自己为其提供种子状态。因此,它是可重入的,如果您在线程环境中使用它(并以不同的方式初始化线程的种子),通常会表现得更好,或者如果您需要它进行可重现的模拟,则它是确定性的。
唯一需要注意的是,它只提供 48 位伪随机性。通常的double
算术都是52位的,所以要小心不要使用最低的4位,它们是没有用的。
归档时间: |
|
查看次数: |
380 次 |
最近记录: |