Sie suchen nach einer Methode zur gleichmäßigen Generierung von Zufallszahlen innerhalb eines bestimmten Bereichs [min, max].
Fehler bei rand
Ihre aktuelle Implementierung mit rand() und dem Modulo-Operator gewährleistet möglicherweise keine gleichmäßige Verteilung. da sein Verhalten von RAND_MAX und dem Bereich selbst abhängt.
C 11 und Uniform Range Generation
In C 11 bietet std::uniform_int_distribution eine auf diesen Bedarf zugeschnittene Lösung :
#include <random> std::uniform_int_distribution<int> distr(min, max); std::random_device rand_dev; std::mt19937 generator(rand_dev()); int random_number = distr(generator);
Zusätzliche Funktionen von
Die
Container-Mischen
Um einen Container zu mischen, verwenden Sie std::shuffle:
#include <random> #include <vector> std::vector<int> vec = {4, 8, 15, 16, 23, 42}; std::random_device random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator);
Boost.Random
Wenn die Verwendung eines C 11-Compilers nicht möglich ist, ziehen Sie Boost.Random in Betracht, das über eine ähnliche Schnittstelle wie verfügt das C 11-Gegenstück.
Das obige ist der detaillierte Inhalt vonWie kann ich in C gleichmäßig verteilte Zufallszahlen innerhalb eines bestimmten Bereichs generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!