从Mersenne Twister获得的数字中只取几个位是否安全

Lou*_*ouf 5 c random prng mersenne-twister

我必须使用现在退休的员工生成的一些代码,并且我对随机数有一些奇怪的事情.在某些时候,他将PRNG 10位返回的值向右移动,然后在该值上使用掩码.

我已经在互联网上看到一些PRNG具有较差的随机性属性,它们生成的数字中有一些位(就像最后一个,只是在1和0之间交替),但我已经搜索过是否存在这样的问题. Mersenne Twister,但我还没有找到.有谁知道这件事?

gal*_*tte 2

通常,任何位都应该是随机的,这是梅森扭曲器的属性。

然而(我对MT了解不太深)你可能在某些位之间存在长期依赖。建议使用库函数来设置整数范围,而不是自己排列位,否则你永远不知道它可能获得的复杂属性。

如果使用c++11标准库,只需将std::mt19937与std::uniform_int_distribution一起使用