0

为了生成随机双打,有 drand48,但是

这些函数被 SVID 3 声明为过时的,它声明应该使用 rand(3) 代替。

如何用 drand48 构造我的随机双精度数?附带说明一下,随机浮动?

简单地连接两个intfromrand()和 cast 可能会导致 NaN,这是不可接受的。我想避免只使用 32 个随机位作为双精度位。

4

1 回答 1

4

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

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

唯一的一点是你必须记住的是它只给你 48 位的伪随机性。通常double的算术是 52 位的,所以要小心不要使用最低的 4 位,它们不好。

于 2012-09-05T21:07:18.140 回答