2009-09-04 8 views
5

ランダムなグループと数字のシーケンスを生成するためにarc4random()関数を使用していましたが、これは過剰であり、random()関数を使用する必要があると言われました代わりに。しかし、random()関数は毎回同じグループと数値のシーケンスを返します。iPhone SDK用のObjective Cで乱数を生成する

random()関数をシードするために私のアプリケーションが最初に起動したときにsrand(time(0))を1回呼び出します。 random()関数を再シードする必要はありますか?

何か不足していますか?

ありがとうございました。

答えて

2

いいえ、乱数ジェネレータを再配置する必要はありません。いくつかの量の数値を生成して投げ捨てることで得られる一貫性がありますが、セキュリティレベルの乱数生成を求めている場合を除き、必要はありません。ほとんどの目的のために、適切にシードされた乱数ジェネレータは十分に均一です。

4

最初に、あなたは、arc4randomが過労だったと言ったのですか?私は自分のプロジェクトでそれを使用し、それは(a)私の要件を満たしている、(b)リソースを吸い取っていない(少なくともユーザーに見えている、またはわかりやすい)、そして(c)あなた自身のコードで同様の使い方が "過度な攻撃"と呼ばれることは、実際には分かりません。

第2のsrand()rand()の機能で、random()ではないため、問題が発生する可能性があります。そして、いいえ、プログラムの実行中にいつでも発電機を再シードする必要はありません。起動時に一度十分です。

+0

random()関数をどのようにシードしますか? –

+0

関数 'randomize()'を試してください。 – Tim

+1

arc4random()は不幸ではないので、random()よりも大幅に良い結果が得られます。 –