Learn iPhone, iOS, Objective-c, Swift, cocos2dx, Unity and ….?

iOSやAndroid開発でのエラー解決法や便利tipsのメモ

RSS Feed

Objective-C – arc4random()が生成する乱数の偏りについて –

0 Comments
Posted by Kuro on 2013/03/05

スポンサードリンク

arc4random()で生成される乱数には偏りがある?

arc4random()で生成される乱数には偏りがあるそうです。

通常、以下の式のように除算の余りを使って乱数を取得しますが、この仕組みに偏りの原因があります。

割られる数である乱数は有限数です。
これが例えば0〜9であったとします。
6で割った余りを取得すると、0から順に余りは0,1,2,3,4,5,0,1,2,3となります。
0,1,2,3は2回出るのに4,5は1回しか出ないという偏りが生じます。
この偏りをmodulo bias(モジュロバイアス)と言います。

この偏りを補正した乱数生成関数がarc4random_uniform()というものです。

上記のような理屈があるのですが、実際のところarc4random()とarc4random_uniformでどのくらい違いが出るのか試してみました。(サンプルコード参照)

いろいろな数値で試してみたのですが、結果、まったく違いが分かりませんでした。

arc4random()が返す値の範囲が0から2^32-1という大きなものなので、modulo biasによる偏りは気が付かない程度にしか出ないのではないかと思います。

とりあえずはarc4random_uniform()を使っておけば損はしないと思います。

サンプルコード

参考サイト:Objective-Cの乱数作成はarc4random_uniform

スポンサードリンク


You can leave a comment, or trackback from your own site.

0 Comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Pingbacks / Trackbacks

スポンサードリンク

Popular Posts