我做错什么了?在
记住1:两个代码使用相同的种子
记住2:据我所知,这两个代码都使用实现相同算法的函数(mersennetwister)。在
C++:
#include <random>
#include <iostream>
int main(int argc, char* argv[])
{
std::mt19937 gen(2);
std::uniform_int_distribution<> dis(0, 61);
for (int n=0; n<10; ++n)
std::cout << dis(gen) << ' ';
return 0;
}
Python 3.6:
^{pr2}$注意:randint
有一个排他的上界。这就是为什么我在C++代码上使用61,而在Python代码上使用62。在
您应该注意C++的标准库分布,包括^ {CD1>},使用实现定义的算法。换句话说,这些实现可能取决于您选择的C++库实现方式,而这些库可能会在将来改变这些算法。(这与C++的随机引擎类,如^ {< CD2> }形成对比,这保证了从同一个种子返回相同的伪随机值。)也见this answer。在
您最好的做法是实现或找到RNG算法的稳定实现(例如我在my article中描述的算法)并实现它们提供的transform the random numbers方法。(在为特定应用程序选择RNG时,需要记住一些事情;我在这里链接的第一篇文章提供了更多信息。)
从RNG到单个有界整数没有唯一的方法。请参见示例:
http://www.pcg-random.org/posts/bounded-rands.html
有几个版本。请注意,C++和Python在这里使用不同的选项,因此,您将获得与“相同”RNG和种子不同的序列。在
相关问题 更多 >
编程相关推荐