rand() を使用して乱数を作成しています。コードを実行すると:
int lowest=10000, highest=90000000000;
int range=(highest-lowest)+1;
for (int index=1; index<2; index++){
c = lowest+int(range*rand()/(RAND_MAX + 1.0));
C は、正と負の両方の数値として返されます。これはなぜですか、どうすれば修正できますか?
rand() を使用して乱数を作成しています。コードを実行すると:
int lowest=10000, highest=90000000000;
int range=(highest-lowest)+1;
for (int index=1; index<2; index++){
c = lowest+int(range*rand()/(RAND_MAX + 1.0));
C は、正と負の両方の数値として返されます。これはなぜですか、どうすれば修正できますか?
range * rand()
溢れ出して包み込んでいるからです。
このアプローチは「修正」できません。可能な値を取得するだけRAND_MAX
で、range
選択されない大きな穴が残るためです。(または、(INT_MAX - INT_MIN + 1) / (RAND_MAX + 1)
が より小さい場合RAND_MAX
、取得できる個別の結果の数です)
新しい C++11 乱数ジェネレーターを使用します。
C++11 を使用できない場合は、ビットシフトと OR 演算子を使用して、複数のrand()
結果を 1 つの数値に結合します。範囲外の数値を取得した場合は、もう一度やり直してください。ある範囲を別の範囲にマッピングする方法は、一様分布など、疑似乱数の優れた特性のほとんどを壊します。