【发布时间】:2016-04-30 16:59:31
【问题描述】:
我正在为我的包开发一个测试套件,作为测试的一部分,我想在一个数据块上运行我的算法。然而,我突然想到,我可以使用一种算法来生成它,而不是硬编码一个特定的数据块。我想知道 C++11 <random> 设施是否适合此目的。
据我了解,实现特定算法需要 C++11 随机数引擎。因此,给定相同的种子,它们应该在算法参数定义的范围内产生相同的随机整数序列。
但是,就发行版而言,该标准规定:
生成每个指定分布的算法是实现定义的。
(26.5.8.1 随机数分布类模板/一般)
这——除非我弄错了——意味着分布的输出几乎是未定义的。根据我的测试,GNU libstdc++ 和 LLVM 项目的 libc++ 中的分布在相同的随机引擎下会产生不同的结果。
因此,问题是:产生可在不同平台上完全重复的伪随机数据的最正确方法是什么?
【问题讨论】:
-
这意味着您要么直接使用 RNG,要么使用可移植的发行版。既然不是标准的,你就必须使用非标准的(手写的或第三方的)
-
可以使用SHA等哈希和