double random(void) { unsigned long a=genrand()>>5, b=genrand()>>6; return(a*67108864.0+b)*(1.0/9007199254740992.0); }とすると、53 bit 精度の実数乱数が得られます。整数化に使うと丸め誤 差が小さくなり、正規乱数やコーシー分布の乱数の最大値・最小値も広がり ます。 」とのことです。
この生成法は、計算量理論的に安全な乱数をそのままでは生成しません。 これは、MTを含めあらゆる線形漸化式に基づく生成法に言えることで、 十分な長さの出力列を見れば、その後の数列を完全に予言することが できます。
そのため、Secure Hashing Algorithm(数ワードを圧縮して1ワードを 生成する、非可逆的なアルゴリズム)と組み合わせて使う必要があります。 例えば、出力列を8ワードごとに切って、ハッシュ関数で 1ワードに圧縮して使う(結果、出力の長さは1/8になる)という工夫が 必要です。別の言い方をすれば、従来存在した「線形疑似乱数(LFSRなど)プラスSHA」の 線形擬似乱数の代わりにMTを使うことは 有効で、すでにそれを実施しているinternet関連の企業があります。
この際、応用によっては初期値が2^32種類では足りないことがおき得ます。 次の項目を見てください。