3

ランダムな double number を生成したいのですがx、ここで: 0 <= x <= 1:

double x = ((double) rand() / (RAND_MAX));

これは [0,1] からランダムな倍精度数を取得する正しい方法ですか?

4

5 に答える 5

6

はい、と の両方をstd::rand()返します。ただし、C++11 を使用できる場合は、代わりに使用できます。0RAND_MAXstd::uniform_real_distribution

また、乱数ジェネレーターを初期化することを忘れないでください。そうしないと、すべての実行で同じシーケンスが得られます。を使用する場合はstd::randstd::srand( std::time(0) )ほとんどの場合で十分です。

于 2013-11-02T12:19:51.330 に答える
3

はい。

ただし、一部の括弧は不要です。

また、システムの rand(3) 関数を信頼できるかどうかは、アプリケーションによって異なります。本格的なモンテカルロ シミュレーションでは、数値ライブラリから十分に文書化された乱数ジェネレータが必要になります。

于 2013-11-02T12:21:28.713 に答える
1

ランダムなダブルを探していた場合、これが私が達成した方法です。

関数で探している場合は、この投稿を編集できます。

rand() は stdlib.h に含まれています

    #include <stdlib.h>
    #include <time.h>
    #include <iostream>
    using namespace std;
    int main()
    { 
        double num;
        double max;

        srand(time(NULL));

        cout << "Enter a number.";
        cin >> max;

        num = (((double)rand()*(max) / RAND_MAX) - max) *(-1);

        cout << num;


    }
于 2016-02-28T19:16:55.057 に答える
1

はい、でも RAND_MAX を double にキャストすることをお勧めします:

double r = ((double)rand() / (double)(RAND_MAX));

不要な場合もありますが、コンパイラは、ターゲット変数とソース変数の型に応じて、演算子を別の型に自動的にキャストする場合があります。例:

3.5 / 2 は、除数が整数であるため、1.75 ではなく 1 に等しい可能性があり、これを回避するには、次のようにする必要があります。

3.5 / 2.0 または 3.5 / (ダブル)2

于 2013-11-02T12:24:02.833 に答える