C++ では、ランダムな浮動小数点数を取得したいと考えています。私が覚えていることから、典型的な乱数生成は次のように行われます。
rand() % 100
これにより、0から99までの値が得られます
- 私が欲しいのは
rand() % PI / 12
解釈は、0 と PI/12 の間のランダムな角度です。
前もって感謝します!
C++ では、ランダムな浮動小数点数を取得したいと考えています。私が覚えていることから、典型的な乱数生成は次のように行われます。
rand() % 100
これにより、0から99までの値が得られます
rand() % PI / 12
解釈は、0 と PI/12 の間のランダムな角度です。
前もって感謝します!
C++11<random>
ソリューションを使用すると、次のようになります。
#include <random>
#include <iostream>
int main()
{
const int length = 60;
std::random_device rd;
std::mt19937_64 mt(rd());
std::uniform_real_distribution<double> distribution(0, M_PI/12);
for(int i = 0; i < length; i++)
{
double d = distribution(mt);
std::cout << "d = " << d << std::endl;
}
}
あなたがしたいことは次のようなものです:
double RealRand (double up_to)
{
return double(rand()) / RAND_MAX * up_to;
}
事実上、これが行うことは、最初に 0 から 1 (左端を含む) の間の乱数を生成し、次にその数を [0.. up_to
] にスケーリングすることです。(注: ご存じない場合のために、rand()
関数は 0 から の間のランダムな整数を生成しRAND_MAX
ます。)
ただし、これを実行したくない理由が (少なくとも) 2 つあります。まず、rand()
通常、乱数ジェネレーターは不適切です。次に、一部のプラットフォーム (Visual C++ など)RAND_MAX
では、非常に小さい数値 (32767 など) であり、生成された実数値の解像度が非常に低くなります。
<random>
ヘッダー (新しい C++) で機能を使用することを強くお勧めします。