C++中是否存在等价性?对于给定的种子,随机数的顺序总是相同的



如果我在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)

srand(seed(在C++中工作吗。。我看到的回答要么是要么不是…

C++中是否存在等价性-对于给定的种子,随机数的顺序将始终是相同的

是。这种行为是所有伪随机数生成器固有的。

C++标准库在<random>头中具有伪随机数API。还有旧的C PRNG API,但我建议不要将其用于任何需要良好质量随机性的应用。


但有一点需要注意。只要PRNG算法保持不变,序列将是相同的。旧的C API的算法没有被准确地指定,因此序列可以——而且确实——在不同的标准库和/或语言实现中变化。这个问题也适用于Java虚拟机的不同实现。

<random> API的生成器引擎是精确指定的,因此在实现之间是确定的,除了std::default_random_engine,它可以并且确实在实现之间变化。不幸的是,标准API的分布(均匀分布、正态分布等(并没有被准确地指定,因此使用它们会在标准库实现中引入潜在的差异。

最新更新