「トーク:ゲームプログラミング」の版間の差分

最新のコメント:5 年前 | トピック:乱数に rand() を使ってはいけない | 投稿者:Siglite3
削除された内容 追加された内容
乱数に関して
(相違点なし)

2018年7月8日 (日) 03:36時点における版

乱数に rand() を使ってはいけない

rand関数で生成された乱数を、割り算(÷6)で割って、あまりは0以上5以下なので、余りに +1 するのが、rand関数による割り算プログラムの定石である。

最初読んだときは目を疑いました。

  1. rand()関数は擬似乱数を生成します。これは真の乱数(真性乱数)とは違います。四則演算やシフト演算を駆使して「乱数っぽい値」を返しているだけです。再現性や周期性があります。
  2. rand()関数の下位ビットは周期が短いことがあります。場合によっては「偶数の次は必ず奇数、奇数の次は必ず偶数」といった法則性が生まれてしまいます。
  3. rand()関数は線形合同法を利用しており質が低いので、MTやXorShiftなど別の実装を使うことが推奨されています。

ですから、普通rand()は使いませんし、使うとしても下位ビットは切り捨てて使います。常識です。細かい話は[1][2]を読むといいでしょう。

ところで、すじにくシチューさんが書かれているのは「ゲームプログラミング」ではなく「ゲームを題材にしたCプログラミング」ではないでしょうか? C言語の使い方はここで書くことではないと思いますが……。--Siglite3 (トーク) 2018年7月8日 (日) 03:36 (UTC)返信

ページ「ゲームプログラミング」に戻る。