C++ でランダムな浮動小数点数を生成するにはどうすればいいですか?
整数 rand を何かで割ることができると思ったのですが、それで十分でしょうか?
ベストアンサー1
rand()
C++ で疑似乱数を生成するために使用できます。RAND_MAX
と少しの計算を組み合わせることで、任意の間隔で乱数を生成できます。学習目的やおもちゃのプログラムにはこれで十分です。正規分布の真の乱数が必要な場合は、より高度な方法を使用する必要があります。
これにより、0.0 から 1.0 までの数値が生成されます。
float r = static_cast <float> (rand()) / static_cast <float> (RAND_MAX);
これにより、0.0 から任意の数値が生成されますfloat
。X
float r2 = static_cast <float> (rand()) / (static_cast <float> (RAND_MAX/X));
LO
これは、任意の から任意の までの数値を生成しますHI
。
float r3 = LO + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(HI-LO)));
真にランダムな数値が必要な場合、このrand()
関数では十分ではないことが多いことに注意してください。
を呼び出す前にrand()
、 を呼び出して乱数ジェネレーターを「シード」する必要がありますsrand()
。これは、 を呼び出すたびに 1 回ではなく、プログラムの実行中に 1 回実行する必要がありますrand()
。これは通常、次のように行われます。
srand (static_cast <unsigned> (time(0)));
rand
または に電話するには、srand
をする必要があります#include <cstdlib>
。
を呼び出すにはtime
、 する必要があります#include <ctime>
。