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

时间:2012-09-05 20:56:52

标签: c random double

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

  

这些函数被SVID 3声明为废弃   应该使用rand(3)。

如何使用drand48构建我的随机双精度?在旁注, 随机漂浮?

简单地连接int中的两个rand()并进行投射可能会导致 NaN,这是不可接受的。我想避免只使用32个随机 比特为双。

1 个答案:

答案 0 :(得分:4)

这篇关于linux手册中过时标准的引用是不幸的。如果我看到正确的SVID 3是1986年出版的,并且已经过时了。 POSIX具有这一系列功能,并没有计划逐步淘汰它们。

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

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