【问题标题】:How do I create a random double with rand()?如何使用 rand() 创建随机双精度数?
【发布时间】:2023-03-19 11:28:01
【问题描述】:

用于生成随机双打,有drand48,但是

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

如何用 drand48 构造我的随机双精度数?另一方面, 随机浮动?

简单地连接来自rand() 的两个int 并且强制转换可能会导致 NaN,这是不可接受的。我想避免只使用 32 个随机数 双倍位。

【问题讨论】:

标签: c random double


【解决方案1】:

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

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

唯一需要注意的是,它只提供 48 位的伪随机性。通常double 算法是52 位的,所以注意不要使用最低4 位,它们不好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 2013-08-10
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    相关资源
    最近更新 更多