VC2010版mersenne_twisterで叱られた
VC2010よりC++11の機能が一部搭載された。randomもその一つ。積極的に使っているのだがデバッグ中に叱られてしまった。叱られた理由は種がよくないという警告。何も考えずにとりあえず0を入れていたのだがそれが良くないっぽい。実際にソースを追ってみたら以下のコードに行き着いた。
void seed(unsigned long _X0 = default_seed, _Ty _Fx = (_Ty)1812433253) { // set initial values from specified value _RNG_ASSERT(0 < _X0, "invalid argument for mersenne_twister::seed")
気になった警告部分が 0 < _X0 の部分。ひょっとして<=の間違いでは?いやでもunsignedだから必ず正になるわけだからこの警告は0を弾くためにあるはず。ということは数学的にmersenne_twisterの種として0ってよくないということなのかな?
まあなんだかわからないけどとりあえず0を避けることにします。