Arc4random()を使用するときに数値の範囲を設定できますか?たとえば、50-100のみ。
以下の他の投稿で指摘されているように、_arc4random_uniform
_を使用することをお勧めします。 (この回答が最初に書かれたとき、_arc4random_uniform
_は利用できませんでした)。 arc4random() % x
のモジュロバイアスを回避することに加えて、短い時間枠で再帰的に使用した場合の_arc4random
_のシード問題も回避します。
_arc4random_uniform(4)
_
0、1、2、または3を生成します。したがって、次を使用できます。
_arc4random_uniform(51)
_
結果に50を追加するだけで、50〜100の範囲(包括的)になります。
JohnKのコメントを拡張します。
次の関数を使用して、範囲指定された乱数を返すことをお勧めします。
_arc4random_uniform(51)
_
_0
_から_50
_の範囲の乱数を返します。
次に、次のように下限を追加できます。
_arc4random_uniform(51) + 50
_
_50
_から_100
_の範囲の乱数を返します。
arc4random_uniform(51)
over arc4random() % 51
を使用する理由は、 モジュロバイアス を避けるためです。これは、manページで次のように強調表示されます。
arc4random_uniform(upper_bound)は、upper_boundより小さい均一に分布した乱数を返します。 arc4random_uniform()は、上限が2のべき乗でない場合に「モジュロバイアス」を回避するため、「arc4random()%upper_bound」のような構造よりも推奨されます。
つまり、より均等に分布した乱数が生成されます。
int fromNumber = 10;
int toNumber = 30;
int randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;
randon number
と10
の間の30
、つまり11,12,13,14......29
を生成します
このコードを使用して、範囲を持つランダムな値を生成できます。
//range from 50 to 100
int num1 = (arc4random() % 50) + 50; or
int num1 = arc4random_uniform(50) + 50;
//range from 0-100
int num1 = arc4random() % 100; or
int num1 = arc4random_uniform(100);
Swiftこれを使用できます( @ Justyn の回答に触発されて)
func generateRandomKey(fromRange rangeFrom:Int, toRange rangeTo:Int) -> Int{
let theKey = arc4random_uniform(UInt32(rangeTo - rangeFrom)) + UInt32(rangeFrom)
return Int(theKey)
}
常にランダムな範囲の整数を提供します。
多くの場合、10〜30は包括的(10と30を含む)を意味します...
int fromNumber = 10;
int toNumber = 30;
toNumber ++;
int randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;
ToNumber-fromNumberの違いは21 ...(20 + 1)であり、0から20(両端を含む)の可能な結果が得られ、fromNumber(10)に追加すると10から30(両端を含む)になります。