アカウント名:
パスワード:
13.16: ある範囲の整数からなる乱数はどうやったら生成することができるか。 A: すぐに思い付く、 rand() % N (これは0からN-1までの数を返そうとする)は乱数の質が低い。なぜなら乱数発生器の多くで下位のビットは悲惨なほどランダムでない(質 問13.18を参照のこと)。よりよい方法は以下のようなものである。 (int)((double)rand() / ((double)RAND_MAX + 1) * N) 浮動小数を使うことが気になるのなら、以下の方法を試せばよい。 rand() / (RAND_MAX / N + 1)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常
理解できん (スコア:0)
何でこんなことになったの?
Re:理解できん (スコア:1)
rand() % N
とすると法則性がでてしまうので、
(rand() / M) % N
/* M は適当に大きな数字 */
とかを使った方がより乱数性がよくなるとか。
Re:理解できん (スコア:4, 参考になる)
Re:理解できん (スコア:0)
Re:理解できん (スコア:3, 参考になる)
○:M は適当に大きな素数
正確に理解&記憶しとこうね。素数かどうかで全然効果が違うから。
Re:理解できん (スコア:0)
(int)(((double)rand() / RAND_MAX) * N)
というのを見ました。
以来ずっと乱数生成にはこれを使ってます……いい加減random()辺りに乗り換えろと言われそうですが