4
int randomNumber = (arc4random() % 83) + 1;

これは「最もランダムな」数を生成するための最良の方法ですか?または、乱数を生成するためのより良い方法はありますか?

4

3 に答える 3

13

を使用すると、線形合同法(で使用される通常のアルゴリズム)arc4randomで使用する際の落とし穴を回避できます。下位ビットはそれほどランダムではありません。%rand

ただし、まだ切り捨ての問題があります。つまり、(1 << 32) % 8377であるため、0〜76の数値は77〜82の数値よりも(わずかに)頻繁に表示されます。これを回避するには、着信値を破棄する必要があります(つまり、arc4random再び)それが上にある場合(1 << 32) / 83 * 83

arc4random(の範囲は0から2 32 -1であると想定しています。それに応じて上記の説明を調整してください。)

于 2010-12-14T04:48:25.397 に答える
9

arc4randomには、現在の時刻に基づいて乱数を生成するための優れたアルゴリズムがあります。他のランド関数もありますが、それらはそれほど良くなく、シードが必要です。

于 2010-12-14T04:36:36.637 に答える
2

私が今まで見た中で最高の乱数発生器 (および乱数の意味の非常に明確な定義) は、Stephen Wolfram の A New Kind of Science にあります。彼は Mathematica ソフトウェア プログラムで何十年も乱数発生器として非常に単純なセル オートマトンを使用してきたため、非常によくテストされています。

于 2012-07-19T20:13:44.017 に答える