如果我在 Java 中有以下内容...我想让用户指定随机数生成器的种子,因此对于给定的种子,随机数的顺序始终相同...最终会输入要生成的种子每次都是相同的字母图案..
Random rand = new Random(Long.parseLong(t[0]));
char r = (char)(rand.nextInt(26) + 'A');
What would be the equvalent to do the same for random in C++
cin >> seed;
srand(seed);
char('A' + rand() % 26)
Run Code Online (Sandbox Code Playgroud)
srand(seed) 在 C++ 中工作吗...我已经看到响应是或否...
C++ 中是否存在等价的 - 对于给定的种子,随机数的顺序将始终相同
是的。这种行为是所有伪随机数生成器所固有的。
C++标准库中有伪随机数API<random>头文件中有伪随机数API。还有旧的 C PRNG API,但我建议不要将它用于任何需要良好质量随机性的事情。
但有一个警告。只要 PRNG 算法保持不变,序列就会相同。旧的 C API 的算法没有准确指定,因此序列可以并且确实在不同的标准库和/或语言实现中有所不同。这个问题也适用于 Java 虚拟机的不同实现。
API的生成器引擎<random>是精确指定的,因此在不同的实现中都是确定性的,除了它std::default_random_engine可以而且确实在不同的实现中有所不同。不幸的是,标准 API 的分布(均匀分布、正态分布等)并未准确指定,因此使用它们会在标准库实现之间引入潜在的差异。