2013年8月7日水曜日

乱数生成はarc4randomよりarc4random_uniformを使うといいらしい

乱数生成によく使う関数でarc4random()があります。この関数はrand()で行う初期化作業が必要ないので重宝されています。

しかし欠点もあり、以下がそうです。

実はarc4random()はランダム性に少しバイアスが掛かっています。arc4random()は0から2^32-1の値を返すため、それの法をとる際に微妙にランダム性が崩れるのです(modulo bias:0から10の値をとるランダム値のモジュロ7の法をとると、0-3の出現割合は4-6の二倍になりますね)。ただし、MAX_NUMが2の累乗であれば完全にランダムとなります。

Objective-Cの乱数作成はarc4random_uniform - だいたい47度

これを補ってくれるのが arc4random_uniform() です。

arc4random_uniform()の使い方

使い方はarc4random()と似ています。
// 0から9の乱数を生成
int randInt = arc4random_uniform(10);

参考記事

Objective-Cの乱数作成はarc4random_uniform - だいたい47度

0 件のコメント:

コメントを投稿