我正在为我的包开发一个测试套件,作为测试的一部分,我想在一个数据块上运行我的算法。然而,我想到,与其硬编码一个特定的数据块,我可以使用一个算法来生成它。我想知道C++11 <random>工具是否适合用于此目的。
据我所知,实现特定算法需要C++11随机数引擎。因此,给定相同的种子,它们应该在算法参数定义的范围内产生相同的随机整数序列。
然而,就发行版而言,标准规定:
生成每个指定发行版的算法都是实现定义的。
(26.5.8.1随机数分布类模板/一般情况下)
这--除非我弄错了--意味着分发的输出几乎是没有定义的。根据我测试的结果,在相同的随机引擎的情况下,GNU libstdc++和LLVM项目的libc++中的分布会产生不同的结果。
因此,问题是:在不同平台上产生完全可重复的伪随机数据的最正确的方法是什么?
发布于 2016-04-30 17:13:52
在不同的平台上产生完全可重复的伪随机数据的最正确的方法是什么?
这是显而易见的:编写您自己的发行版。正如您自己指出的,引擎是跨平台的,因为它们实现了特定的算法。是实现定义的发行版。
所以你自己写发行版吧。
发布于 2016-05-02 10:38:50
请看这个答案:https://stackoverflow.com/a/34962942/1151329
我确实有这个问题,并且编写我自己的发行版非常有效。我在linux、OSx、windows、x86和ARM上都得到了相同的序列。
https://stackoverflow.com/questions/36957670
复制相似问题