我只是想知道rand(http://www.cplusplus.com/reference/cstdlib/rand/)函数是否会生成相同的随机数序列,同时使用相同的种子,在不同的 libc实现上运行,甚至不同的编译器和操作系统(win,linux).
我使用各种编译器(g ++ 4.8,g ++ 5.1和clang)进行了一些测试,似乎答案是肯定的,但我没有发现任何"正式"提到C的随机数生成中使用的PRNG算法(http://pubs.opengroup.org/onlinepubs/009604599/functions/rand.html),还是这些都应该在标准中提到的...
我正在为标准的C++ 11引擎寻找一组可移植的发行版,比如`std :: mt19937'(参见http://en.cppreference.com/w/cpp/numeric/random).
引擎实现一致地执行(即在不同平台上生成相同的序列 - 使用Clang和MSVC进行测试),但是分布似乎在不同平台上以不同方式实现.
因此,即使引擎产生相同的序列,似乎分布(例如std::normal_distribution<double>)在不同的平台上不使用相同数量的样本(即产生不同的结果),这在我的情况下是不可接受的.
可能有一个第三方库我可以使用它遵循C++ 11随机模板,但这将在流行的平台上提供一致的值(看看GCC,MSVC和Clang/llvm的支持).
我到目前为止看到的选项是:
我需要制服,正常,毒药和瑞利.
c ++ 11中的库是可移植的吗?我避免使用rand(),因为我听说它不便携.
我非常希望能够重复生成相同的伪随机数据集,特别是在调整实验代码时.通过观察我会说,rand()每次*似乎给出相同的数字序列.
是否可以保证在同一台机器/不同机器/不同架构上重复执行?
*明显对于同一种子.
标题说明了一切,我正在寻找一些最好的东西,因为我不想添加更多的库.
性能应该很好,因为我需要一个紧凑的高性能循环.我想这将以随机程度为代价.