6

私が開発しているものの一部は、ランダムな会社名ジェネレーターです。名前部分のいくつかの配列から描画します。関数を使用してrand()、ランダムな名前の部分を描画します。ただし、アプリを起動するたびに同じ「乱数」が常に同じ順序で生成されるため、常に同じ名前が表示されます。

だから私はSOの周りを検索しました.Cにはsrand()、ランダム関数を現在の時間のようなもので「シード」して、よりランダムにする関数がありますsrand(time(NULL))。iOS 開発に使用できる Objective-C のようなものはありますか?

4

2 に答える 2

30

arc4randomシードを必要としないものを使用してみませんか? 次のように使用します。

int r = arc4random();

と比較した記事rand()です。マニュアルページには、次のarc4random()ように比較して次のように記載されていrand()ます。

arc4random() 関数は、8*8 8 ビット S-Box を使用する arc4 暗号で使用されるキー ストリーム ジェネレータを使用します。S-Box は、約 (2 1700) の状態になる可能性があります。arc4random() 関数は、0 から (2 32)-1の範囲の疑似乱数を返すため、rand(3)および random(3) の 2 倍の範囲を持ちます。

範囲内の乱数が必要な場合は、arc4random_uniform()関数を使用できます。たとえば、0 から 10 までの乱数を生成するには、次のようにします。

int i = arc4random_uniform(11);

マニュアルページからの情報は次のとおりです。

arc4random_uniform(upper_bound) は、upper_bound より小さい一様分布の乱数を返します。arc4random_uniform() は ``arc4random() % upper_bound'' のような構造よりも推奨されます。これは、上限が 2 のべき乗ではない場合の「モジュロ バイアス」を回避するためです。

于 2012-08-25T05:33:13.527 に答える
9

関数rand()srand()は標準 C ライブラリの一部であり、Objective-C を使用した iOS 開発で完全に利用できる C ライブラリの残りの部分と同様です。これらのルーチンは と に取って代わられていることに注意してください。これらはrandom()とのsrandom()呼び出し規則はほぼ同じですが、より長い周期ではるかに優れた結果を生成します。乱数デバイスを使用して乱数発生器の状態を初期化するルーチンもあります。これらも標準 C ライブラリの一部であり、iOS の Objective-C で使用できます。rand()srand()srandomdev()

于 2012-08-25T05:32:02.577 に答える