2

私のプログラムでは、ランダムな double を繰り返し (何百万回も) 生成する必要があり、分布がフラットで範囲が異なる変数がいくつかあります。現在、これは私がしていることです:

double w, v, k;
double wmax = 0.5;
double vmax = 1.0;

std::random_device rd;
std::default_random_engine dre(rd());
std::uniform_real_distribution<double> wRand(-wmax, wmax);
std::uniform_real_distribution<double> vRand(-vmax, vmax);
std::uniform_real_distribution<double> kRand(0.0, 1.0);

w = wRand(dre);
v = vRand(dre);
k = kRand(dre);

これは適切な方法ですか、または 1 つの分布を持ち、そこからすべての数値を構築する方が良いですか? 私はパフォーマンスの問題に非常に注意を払っており、1 つのディストリビューションと 2 つの算術演算を行う方が速いと感じています。しますか?そのような場合の乱数の比較品質はどうですか?

4

1 に答える 1

1

私の提案は、それらを適切にスケーリングするために、3 つの算術演算を含む単一の分布を使用することです。使用するメモリが少なくなり、算術演算が高速になります。

しかし、全体的なパフォーマンスは、ループをどのように構築し、分岐の予測ミスを最小限に抑えるかによって、より左右されます。 この質問を参照してください

于 2013-05-24T00:57:24.473 に答える