Sie möchten Zufallszahlen erzeugen, die innerhalb eines bestimmten Intervalls [min, max] gleichmäßig verteilt sind. Ihre aktuelle Methode erzeugt jedoch Zahlen, die um einen einzelnen Punkt gruppiert sind.
Die Funktion rand() ist beim Generieren gleichmäßiger Verteilungen oft unzuverlässig. Es basiert auf einem Moduloperator, der Verzerrungen einführen kann.
In C 11 sollten Sie die Verwendung von std::uniform_int_distribution für eine zuverlässigere Lösung in Betracht ziehen:
#include <iostream> #include <random> int main() { const int range_from = min; const int range_to = max; std::random_device rand_dev; std::mt19937 generator(rand_dev()); std::uniform_int_distribution<int> distr(range_from, range_to); std::cout << distr(generator) << '\n'; }
Die C 11-Bibliothek bietet verschiedene andere Zufallsgeneratoren mit unterschiedlichen Verteilungen. Beispielsweise kann std::shuffle die Elemente eines Containers zufällig neu anordnen.
Wenn C 11 nicht verfügbar ist, sollten Sie Boost.Random verwenden, das eine ähnliche Funktionalität bietet.
Das obige ist der detaillierte Inhalt vonWie kann ich in C wirklich einheitliche Zufallszahlen generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!