为了生成随机双打,有drand48,但是
这些函数被SVID 3声明为废弃 应该使用rand(3)。
如何使用drand48构建我的随机双精度?在旁注, 随机漂浮?
简单地连接int
中的两个rand()
并进行投射可能会导致
NaN
,这是不可接受的。我想避免只使用32个随机
比特为双。
答案 0 :(得分:4)
这篇关于linux手册中过时标准的引用是不幸的。如果我看到正确的SVID 3是1986年出版的,并且已经过时了。 POSIX具有这一系列功能,并没有计划逐步淘汰它们。
但如果你在这,请考虑使用erand48
而不是drand48
。它的优势在于您自己为它提供种子状态。通过它是可重入的,如果你在线程环境中使用它(并且以不同的方式初始化线程的种子)通常表现得更好,或者如果你需要它来进行可重复的模拟,那么它是确定性的。
唯一的小问题是你必须要记住的是它只能给你48位的伪随机性。通常的double
算术是52位的,所以要小心你不要使用最低的4位,它们并不好。