2017-05-13 3 views
2

申し訳ありませんが、私はすでに同様の質問が掲載されていることを知っていますが、この本はそれでも私を混乱させています。 「Cプログラミング:初心者ガイド」ではモジュラス演算子を使用して特定の範囲のランダム変数を取得する

は:

dice1 = (rand() % 5) + 1; 

はサイコロゲームのために1〜6の間の乱数を生成するために、ラインがあります。

これはエラーではありませんか?私の理解から、% 5を使って5の残りの部分を得ることはできないので、行は1から5までの数字しか生成しません。私は絶対的な初心者ですので、エラーが出ているのか、本があるのか​​分かりません。誰かが確認できますか?

+2

これは正しいですか?この本は、その数字が1から6までであると主張するなら、間違っている。 – StoryTeller

+1

はい、エラーです。 –

+0

ありがとうございます。それは私にナッツを運転していた。 – 5areductase

答えて

0

はい、5 % 5 == 0なので、完全な表現から1〜5の数字しか得られませんでした。この方法のもう1つの問題は、rand()がおそらく0から2までの数字を返すということです。n -1となるため、異なる値の合計数は他の2のべき乗に等しく分割することができます。 したがって、rand()自体が出力範囲に沿って均等に分散した値を与えるとしても、モジュラスは結果の数値の均等分布を与えません。

関連する問題