std::default_random_engine erzeugt die gleichen Werte, die auch bei wechselnden seed?

Ich versuche zu implementieren eine Klasse, die dient als eine Art wrapper für die random-Bibliothek, so kann ich mit seinen Objekten und Funktionen, die in (glaube ich) eine mehr intuitive Art und Weise an anderer Stelle in meinem code.

In meinem Kopf-ich habe so etwas wie dieses:

class RandomDevice{
private:
    unsigned long rand_seed;
    default_random_engine engine;
public:
    RandomDevice(unsigned long n);
    int randInt(int min, int max);};

Und dann in der .cpp-Datei, die ich implementieren Sie die zwei Funktionen (Konstruktor und randInt) etwa so:

RandomDevice::RandomDevice(unsigned long n){
    rand_seed = n;
    default_random_engine engine;
    engine.seed(n);
}

int RandomDevice::randInt(int min, int max){
    uniform_int_distribution<int> distribution(min, max);
    return distribution(engine);
}

Schließlich in meinem main.cpp ich Teste diese Funktionen wie diese:

int main(){
    unsigned long seed = 1;
    RandomDevice my_rand(seed);

    cout << "random integer: " << my_rand.randInt(0, 10) << endl;
}

Das problem ist, egal was ich einstelle der Samen in main.cpp ich bekomme immer die gleichen Werte für meine Zufallszahlen (nicht nur randInt habe ich auch andere Distributionen). Ich habe auch versucht die Einstellung Saatgut zu Zeit(NULL), aber das gleiche problem tritt auf.

Ich bin wirklich meinen Kopf kratzen an dieser. Danke!

Schreibe einen Kommentar