2017-10-27 5 views
0

So versuche ich, eine Zufallszahl zwischen 1 und 61 mit einem überladenen Operator in Klammern zu generieren, aber aus irgendeinem Grund bekomme ich jedes Mal, wenn ich meinen Code ausführen, das gleiche Ergebnis von 49.Generieren von Zufallszahlen in einem Bereich

Hier ist, was ich habe:

double operator()() const { 
    std::uniform_int_distribution<int> _uniformIntDistribution(1, 61); 
    std::default_random_engine _generator; 

    double result;  
    result = _uniformIntDistribution(_generator); 

    return result; 
} 

nicht sicher, was ich falsch mache. Irgendwelche Vorschläge?

Vielen Dank im Voraus!

+0

Nun, wenn Sie den gleichen Zufallszahlengenerator, mit dem gleichen Start Samen jedes Mal erstellen, was haben Sie erwartet? Sie müssen den Zufallsgenerator *** einmal *** erstellen und ihn jedes Mal aufrufen. –

+0

@SamVarshavchik Warte, wo setze ich den Samen? Ich bin verwirrt. Wo immer es ist, ist es definitiv unbeabsichtigt –

+0

@NomOnTheCookie Sie ** kann nicht scheitern **, den Samen einer 'std :: default_random_engine' zu ​​setzen. Ihr standardmäßig erstellter '_generator 'hat einen Standard-Seed – Caleth

Antwort

0

Der Compiler verwendet jedes Mal, wenn er kompiliert wird, den Standard-Seed, und das bedeutet, dass Sie dieselbe Sequenz von Zufallszahlen haben. Je nach Anforderungen an Ihr Programm und wie "zufällig" Ihre Zahlen sein müssen, können Sie den aktuellen Systemzeitwert als Startwert verwenden. Auf diese Weise ändert sich bei jeder Kompilierung die zufällige Engine-Ausgabe. Hier ist Link: Notice member function "seed"

+0

Die Verwendung von Zeit als Seed ist wirklich schlechte Übung, bitte nicht –

+0

Das ist, was ich in Büchern und Foren gelesen habe. Können Sie näher erläutern, warum ist schlecht? Es könnte Leuten mit ähnlichen Fragen ein bisschen mehr helfen. Danke – Adler11th

+0

Das Problem ist ziemlich beteiligt, aber selbst im besten Fall, erhalten Sie Zahlen, die nicht "zufällig" genug ist. Siehe [this] (http://www.pcg-random.org/predicabilty.html) für mehr –

Verwandte Themen