我正在寻找一种方法来生成伪随机数序列,该伪随机数序列将在任何平台上为给定种子产生相同的序列结果。我假设rand()
/srand()
不会是一致的(我可能很容易在这个假设上错了)。跨平台的一致性伪随机数
回答
类似于Mersenne Twister (from Boost.Random)的东西是确定性的。
如果您宁愿避免使用Boost,您可以使用[Mersenne Twister]的原始实现(http://www.math.sci.hiroshima-u.ac.jp/ 〜m-mat/MT/emt.html),这是直写的。近年来,MT集团增加了一些额外的端口,可以使用SIMD,OpenCL和CUDA。 – sfstewman 2013-03-19 18:19:24
看到我的问题和答案C++ 11随机生成器。 C++ 11 mt19937在所有平台上提供了一致的结果,但标准分布并没有,所以我创建了自己的分布式:http://stackoverflow.com/questions/34903356/c11-random-number-distributions-are-not -consistent-across-platforms-what-al – 2016-01-23 11:43:32
最简单的方法是自己编写一个随机数生成器,但是使用针对不同平台发布的库并保证能够提供相同的结果也可以。
我怀疑rand()/ srand()是否一致,但我不知道。
Knuth的released into the public domain C (and FORTRAN) source code用于的3.6节中描述的伪随机数发生器计算机编程艺术。
我意识到这是一个旧的线程,但现在用C++ 11有一大堆new options available。这里是从默认使用Mersenne Twister
发动机和Normal
分布页面蒸馏例如:
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
#include <random>
int main()
{
std::random_device rd;
//
// Engines
//
std::mt19937 e2(rd());
//std::knuth_b e2(rd());
//std::default_random_engine e2(rd()) ;
//
// Distribtuions
//
std::normal_distribution<> dist(2, 2);
//std::student_t_distribution<> dist(5);
//std::poisson_distribution<> dist(2);
//std::extreme_value_distribution<> dist(0,2);
std::map<int, int> hist;
for (int n = 0; n < 10000; ++n) {
++hist[std::round(dist(e2))];
}
for (auto p : hist) {
std::cout << std::fixed << std::setprecision(1) << std::setw(2)
<< p.first << ' ' << std::string(p.second/200, '*') << '\n';
}
}
我一直在simplerandom
库这一点。它应该是跨平台的,我也瞄准多种语言。目前它支持C和Python(两种语言生成相同的数字)。我计划在不久之后用C++实现相同的生成器,遵循Boost和C++ 11随机API。
- 1. 属性一致跨平台
- 2. 一致的跨平台(java .Net)伪随机生成器,如果种子相同
- 3. 一致的随机数和平台
- 4. 使用boost :: random的平台随机生成一致随机数
- 5. 跨系统和版本的Java伪随机数的重复性?
- 6. 跨平台的RSA签名不一致
- 7. 跨平台的Docker容器/ VM的一致主机名?
- 8. 跨平台mySQL与字符集的不一致性
- 9. 伪随机性迭代
- 10. 伪随机整数
- 11. 跨平台手机游戏?
- 12. 相机跨平台(xamarin)
- 13. 真正的随机与伪随机(你可以伪随机真正的随机性)
- 14. 随机性水平
- 15. 跨多个平台的双数学一致吗?
- 16. Realm数据库跨平台兼容性?
- 17. 伪随机数生成
- 18. 伪随机数发生器
- 19. C++和c之间不一致的伪随机#
- 20. 跨平台的手机开发环境
- 21. 非线程安全性是否会增加具有随机伪随机数生成器的随机性?
- 22. 伪随机图案
- 23. 加密伪随机
- 24. SWIG的跨平台兼容性
- 25. 跨平台
- 26. Android跨平台
- 27. SWIG跨平台
- 28. 跨平台Bonjour
- 29. 跨平台C?
- 30. MD5跨平台
看到我的问题和答案C++ 11随机生成器。 C++ 11 mt19937在所有平台上提供了一致的结果,但标准分布并没有,所以我创建了自己的分布式:http://stackoverflow.com/questions/34903356/c11-random-number-distributions-are-not -consistent-across-platforms-what-al – 2016-01-23 11:46:28