根据标准,mt19937::d efault_seed
的值为 5489u
:
static constexpr result_type default_seed = 5489u;
这似乎很人为。
这背后有什么(数学或理论)原因吗?
C的Mersenne Twister使用5489作为默认种子值,因为以前有很多很多实现都使用过它。也就是说,这是一种传统。作为一个比C实现早很长时间的例子,Matlab也使用了5489。
因此,使用0或1是不一致的,因为这些值不是其他流行的Mersenne Twister实现所使用的值。
在5489之前已经使用了其他值,如4357,请查看此主题以了解一些详细信息和这些历史默认种子的链接:https://sourceware . org/legacy-ml/GSL-discuse/2006-Q4/msg 00014 . html
5489可能在2002年首次被使用,通过西村和松本的这种实现:http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/MT2002/CODES/mt19937ar.c
最后,请注意,像这样的一些简单的整数种子可以将Mersenne Twister放入相对低熵的初始序列中。我推测有人注意到(在1998年到2002年之间)4357造成了这样的问题,而5489似乎给出了更好的结果。