c++ - C/C++ 算法在不同平台上从相同的种子生成相同的伪随机数序列?

标签 c++ c random portability consistency

<分区>

标题说明了一切,我正在寻找最好是独立的东西,因为我不想添加更多的库。

性能应该不错,因为我需要在一个紧凑的高性能循环中使用它。我想这会以随机性程度为代价。

最佳答案

任何特定的伪随机数生成算法都会表现得像这样。 rand 的问题是它没有指定它是如何实现的。不同的实现将以不同的方式运行,甚至具有不同的质量。

但是,C++11 提供了新的 <random> 包含大量随机数生成工具的标准库头文件。其中定义的随机数引擎定义明确,给定相同的种子,将始终产生相同的数字集。

例如,流行的高质量随机数引擎是std::mt19937 ,这是以特定方式配置的 Mersenne twister 算法。无论您在哪台机器上,以下总是会产生相同的 0 和 1 之间的一组实数:

std::mt19937 engine(0); // Fixed seed of 0
std::uniform_real_distribution<> dist;
for (int i = 0; i < 100; i++) {
  std::cout << dist(engine) << std::endl;
}

关于c++ - C/C++ 算法在不同平台上从相同的种子生成相同的伪随机数序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15500621/

相关文章:

c++ - 使用 C++ 进行事件驱动的客户端/服务器设计

c++ - QToolbar的句柄是什么类型的组件?

c++ - 类型的编译时排序

c - 如何检查打开的文件是否已被另一个进程移动或删除

c - 如何将 Turbo-C 远指针分配和取消引用转换为 x86 程序集?

c++ - (C++) 如何生成一个七位数字,其数字相加等于七的倍数?

Java 数组计数器

c++ - 从字符串类型到类类型的隐式转换

c++ - Windows API,__declspec(thread) vs CreateThread?

c# - 稳定分布的随机数?