Objective-Cでrandom
とarc4random
の違いに関する古い投稿を見て、このオンラインでの回答を見ましたが、本当に理解していなかったので、ここに誰かを期待していましたわかりやすい方法で説明できます。
arc4random
とarc4random_uniform
を使用して乱数を生成することの違いは何ですか?
arc4random
は0から(2 ^ 32)-1までの整数を返し、arc4random_uniform
は0から渡された上限までの整数を返します。
man 3 arc4random
から:
arc4random_uniform()は、upper_boundより小さい均一に分布した乱数を返します。 arc4random_uniform()は、上限が2のべき乗でないときに「モジュロバイアス」を回避するため、「arc4random()%upper_bound」のような構造よりも推奨されます。
たとえば、0〜4の整数が必要な場合は、次を使用できます。
arc4random() % 5
または
arc4random_uniform(5)
この場合にモジュラス演算子を使用すると、モジュロバイアスが導入されるため、arc4random_uniformを使用することをお勧めします。
モジュロバイアスを理解するには、arc4random
の範囲がはるかに狭いと仮定します。 0〜(2 ^ 32)-1の代わりに、0〜(2 ^ 4)-1でした。その範囲内の各数値で%5を実行すると、0が4回、1、2、3、4が3回それぞれ取得され、0が発生する可能性が高くなります。範囲がはるかに大きい場合、この差はそれほど重要ではなくなりますが、モジュラスの使用は避ける方が良いでしょう。