Heim >Backend-Entwicklung >C++ >Wie kann ich in C gleichmäßig verteilte zufällige ganze Zahlen generieren?
Bei der Entwicklung von Software ist die Generierung zufälliger Ganzzahlen innerhalb eines bestimmten Bereichs eine häufige Aufgabe. Allerdings kann es schwierig sein, einen schnellen und gleichmäßig verteilten Zufallszahlengenerator zu finden. In diesem Artikel gehen wir dieses Problem an, indem wir verschiedene Ansätze zur Generierung zufälliger Ganzzahlen innerhalb eines bestimmten Bereichs untersuchen.
Eine gängige Methode zur Generierung zufälliger Ganzzahlen ist die Verwendung von rand() Funktion. Allerdings kann rand(), wie in der ursprünglichen Frage zum Ausdruck gebracht, zu einer voreingenommenen Verteilung führen, insbesondere bei kleinen Bereichen.
Um dieses Problem zu beheben, wurde eine alternative Formel vorgeschlagen:
( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
Diese Formel sorgt zwar für eine gleichmäßigere Verteilung, erfüllt jedoch immer noch nicht alle Anforderungen, nämlich Geschwindigkeit, gleichmäßige Verteilung, variable Bereiche und Säbarkeit.
Einführung in die C-Standardbibliotheksfunktion std::uniform_int_distribution und den zugehörigen Zufallszahlengenerator std::mt19937. Dieser Ansatz ist unkompliziert, schnell und liefert unvoreingenommene Ergebnisse.
#include <random> std::random_device rd; std::mt19937 rng(rd()); std::uniform_int_distribution<int> uni(min,max); auto random_integer = uni(rng);
Das std::random_device initialisiert den Generator mit einer echten Entropiequelle und stellt so sicher, dass die generierten Zahlen unvorhersehbar und zufällig sind. Die std::uniform_int_distribution definiert den Bereich der zu generierenden Ganzzahlen und garantiert, dass alle Werte innerhalb dieses Bereichs die gleiche Wahrscheinlichkeit haben, ausgewählt zu werden.
Dieser Ansatz erfüllt alle Anforderungen:
Zusammenfassend lässt sich sagen, dass der einfachste und beste Ansatz zum Generieren gleichmäßig verteilter Zufallszahlen in C die Verwendung der Funktionen std::uniform_int_distribution und std::mt19937 ist. Dieser Ansatz nutzt die optimierten Algorithmen der Standardbibliothek und gewährleistet so sowohl Geschwindigkeit als auch Zufälligkeit.
Das obige ist der detaillierte Inhalt vonWie kann ich in C gleichmäßig verteilte zufällige ganze Zahlen generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!