1

最小値と最大値を取り、それらの間のランダムな double を返す関数を作成しようとしています。Boost::variate_generator を使用して 2 つの double の間の乱数を取得しようとしていましたが、その分布を変更できないという問題があるため、呼び出しごとに新しいシードを作成する必要があります。呼び出すたびに新しいシードを作成すると、疑似乱数ジェネレーターの目的が無効になります。

以下のようなものを取得する方法はありますか? Boost は必要ありません。良い結果が得られるようです。

double getRandom(double min, double max);
{
    return randomNumberBetweenMinAndMax;
}
4

1 に答える 1

0

それを行う方法はたくさんあります。グローバルに使用可能なオブジェクトにデフォルト設定されるデフォルト パラメータを持つ引数を持つことができます。ジェネレーターを格納するローカル スコープの静的変数を持つことができます。ジェネレーターを格納するファイル スコープの静的変数 (これがクラス内にある場合はクラスの静的に似ています) を持つことができます。関数が取得するシングルトンジェネレーターを使用できます。

私は、グローバルに利用可能なオブジェクトをデフォルトとして使用するデフォルト パラメータに偏っています。ジェネレーターがスレッドセーフであり、スレッドが作成される前に初期化する限り、一般的にスレッドセーフです。

于 2013-05-16T19:10:45.690 に答える