ランダムな double number を生成したいのですがx
、ここで: 0 <= x <= 1
:
double x = ((double) rand() / (RAND_MAX));
これは [0,1] からランダムな倍精度数を取得する正しい方法ですか?
はい、と の両方をstd::rand()
返します。ただし、C++11 を使用できる場合は、代わりに使用できます。0
RAND_MAX
std::uniform_real_distribution
また、乱数ジェネレーターを初期化することを忘れないでください。そうしないと、すべての実行で同じシーケンスが得られます。を使用する場合はstd::rand
、std::srand( std::time(0) )
ほとんどの場合で十分です。
はい。
ただし、一部の括弧は不要です。
また、システムの rand(3) 関数を信頼できるかどうかは、アプリケーションによって異なります。本格的なモンテカルロ シミュレーションでは、数値ライブラリから十分に文書化された乱数ジェネレータが必要になります。
ランダムなダブルを探していた場合、これが私が達成した方法です。
関数で探している場合は、この投稿を編集できます。
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;
}
はい、でも RAND_MAX を double にキャストすることをお勧めします:
double r = ((double)rand() / (double)(RAND_MAX));
不要な場合もありますが、コンパイラは、ターゲット変数とソース変数の型に応じて、演算子を別の型に自動的にキャストする場合があります。例:
3.5 / 2 は、除数が整数であるため、1.75 ではなく 1 に等しい可能性があり、これを回避するには、次のようにする必要があります。
3.5 / 2.0 または 3.5 / (ダブル)2