为了生成随机双打,有 drand48,但是
这些函数被 SVID 3 声明为过时的,它声明应该使用 rand(3) 代替。
如何用 drand48 构造我的随机双精度数?附带说明一下,随机浮动?
简单地连接两个int
fromrand()
和 cast 可能会导致
NaN
,这是不可接受的。我想避免只使用 32 个随机位作为双精度位。
不幸的是,在 linux 的手册页中引用了一个过时的标准。如果我没看错,SVID 3 于 1986 年发布,并且已经过时了。POSIX 具有这一系列功能,并且没有计划逐步淘汰它们。
但是,如果您正在使用它,请考虑使用erand48
而不是drand48
. 它的优点是您自己为其提供了种子状态。由于它是可重入的,如果您在线程环境中使用它(并以不同方式初始化线程的种子),它通常表现得更好,或者如果您需要它进行可重现的模拟,它是确定性的。
唯一的一点是你必须记住的是它只给你 48 位的伪随机性。通常double
的算术是 52 位的,所以要小心不要使用最低的 4 位,它们不好。