「トーク:ゲームプログラミング」の版間の差分
最新のコメント:5 年前 | トピック:乱数に rand() を使ってはいけない | 投稿者:Siglite3
削除された内容 追加された内容
乱数に関して |
(相違点なし)
|
2018年7月8日 (日) 03:36時点における版
乱数に rand() を使ってはいけない
rand関数で生成された乱数を、割り算(÷6)で割って、あまりは0以上5以下なので、余りに +1 するのが、rand関数による割り算プログラムの定石である。
最初読んだときは目を疑いました。
- rand()関数は擬似乱数を生成します。これは真の乱数(真性乱数)とは違います。四則演算やシフト演算を駆使して「乱数っぽい値」を返しているだけです。再現性や周期性があります。
- rand()関数の下位ビットは周期が短いことがあります。場合によっては「偶数の次は必ず奇数、奇数の次は必ず偶数」といった法則性が生まれてしまいます。
- rand()関数は線形合同法を利用しており質が低いので、MTやXorShiftなど別の実装を使うことが推奨されています。
ですから、普通rand()は使いませんし、使うとしても下位ビットは切り捨てて使います。常識です。細かい話は[1]や[2]を読むといいでしょう。
ところで、すじにくシチューさんが書かれているのは「ゲームプログラミング」ではなく「ゲームを題材にしたCプログラミング」ではないでしょうか? C言語の使い方はここで書くことではないと思いますが……。--Siglite3 (トーク) 2018年7月8日 (日) 03:36 (UTC)