1

C++ では、ランダムな浮動小数点数を取得したいと考えています。私が覚えていることから、典型的な乱数生成は次のように行われます。

rand() % 100 

これにより、0から99までの値が得られます

  1. 私が欲しいのはrand() % PI / 12

解釈は、0 と PI/12 の間のランダムな角度です。

前もって感謝します!

4

2 に答える 2

4

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;
    }
}
于 2013-09-10T01:14:59.270 に答える
1

あなたがしたいことは次のようなものです:

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++) で機能を使用することを強くお勧めします。

于 2013-09-10T01:14:22.690 に答える