選択に値の範囲使用時arc4random()
-
26-09-2019 - |
質問
を設定できます。利用の場合arc4random()?例えばく50~100ます。
解決
としては、下記の他の記事で指摘し、それが使用arc4random_uniform
に優れています。 (この答えが最初に書かれたとき、arc4random_uniform
は利用できませんでした)。 arc4random() % x
のモジュロバイアスを回避に加えて、それはまた、短期間に再帰的に使用arc4random
を播種問題を回避します。
arc4random_uniform(4)
0、1、2または3はこのようにあなたが使用することができます生成されます。
arc4random_uniform(51)
単に50&100(両端を含む)の間の範囲を得るために結果に50を追加します。
他のヒント
JohnKコメント時に展開します。
あなたがあった乱数を返すために、次の関数を使用することが示唆されています
arc4random_uniform(51)
0
の範囲の50
乱数を戻します。
次に、あなたのようなこれにあなたの下限を追加することができます:
arc4random_uniform(51) + 50
50
の範囲の100
乱数を戻します。
我々はarc4random_uniform(51)
上arc4random() % 51
を使用する理由は、モジュロバイアスを避けるためです。これは、次のようにmanページで強調表示されます:
arc4random_uniform(UPPER_BOUND)は以下UPPER_BOUNDより均一に分布した乱数を返します。上限が2のべき乗でない場合、それは「モジュロバイアス」を回避するようarc4random_uniform()は `` 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);
でスウィフトあなたが( @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を取得するために使用できます。