3

ヘッダー内:

#ifndef MYCLASS_H
#define MYCLASS_H

#include <random>
#include <cmath>
// other includes...

class MyClass
{
public:
    int GetResult();
private:

    std::normal_distribution<double> *dist1;
    std::default_random_engine rand;
    int model_min, model_max;
    int model_mean, model_sd;
    int var1;
};

#endif

cppでは

初期化関数では:

var1 = 1000;
model_mean = 30;
model_sd = 12;
dist1 = new std::normal_distribution<double>( model_mean, model_sd );
model_min = 10;
model_max = 100;

ランダムな結果を取得する関数では:

int MyClass::GetResult()
{
    int result;
    do {
        result = 0.5f + (*dist1)(rand);
    } while (result < model_min || result > model_max);

    result = result * var1;
    return result;
}

初期化関数を 1 回呼び出してから、GetResult() を 1000000 回呼び出します。500 回から 1000 回の間で返される結果は 0 です。

std::normal_distribution または std::default_random_engine のセットアップと使用に関して、根本的な間違いを犯していると思います。GetResult を 500 回から 1000 回呼び出した後、var1 に奇妙なことが起こり、それがゼロに設定されます。1000 に設定した後に var1 を変更するコード内の場所はありません。

4

0 に答える 0