Heim >Backend-Entwicklung >C++ >So generieren Sie wirklich zufällige Zahlen in C: Reicht „rand()' aus?
So generieren Sie wirklich zufällige Zahlen in C
Bei der Entwicklung von Anwendungen, die die Generierung von Zufallszahlen erfordern, beispielsweise bei Würfelspielen , ist es wichtig sicherzustellen, dass die erzeugten Zahlen wirklich zufällig sind und nicht auf bestimmte Werte ausgerichtet sind.
Der in der Frage dargestellte Codeausschnitt verwendet die Funktion rand() zum Generieren von Zufallszahlen innerhalb eines bestimmten Bereichs. Wie jedoch in der Ausgabe zu sehen ist, wurde dieselbe Zahl wiederholt generiert, was auf einen Mangel an Zufälligkeit hinweist.
Problem:
Das Problem entsteht durch die Verwendung des Modulo Operator (%), um die Zufallszahl einem bestimmten Bereich zuzuordnen. Auch wenn dieser Ansatz praktisch erscheinen mag, kann er abhängig von der Implementierung des Zufallszahlengenerators zu Verzerrungen führen.
Lösung:
Um dieses Problem zu beheben und echte Zufallszahlen in C zu generieren , wird empfohlen, die in C 11 eingeführten Funktionen zu nutzen. Der folgende Code zeigt einen alternativen Ansatz:
#include <random> #include <iostream> int main() { std::random_device dev; std::mt19937 rng(dev()); std::uniform_int_distribution<std::mt19937::result_type> dist6(1, 6); // distribution in range [1, 6] std::cout << dist6(rng) << std::endl; }
In diesem Code wird die Die Klasse std::random_device stellt eine Entropiequelle zur Initialisierung des Zufallszahlengenerators Mersenne Twister (std::mt19937) bereit. Die Klasse std::uniform_int_distribution erstellt ein Verteilungsobjekt innerhalb des gewünschten Bereichs (in diesem Fall [1, 6]).
Beim Aufruf von dist6(rng) wird eine wirklich zufällige Ganzzahl innerhalb des angegebenen Bereichs generiert. Durch die Nutzung dieser C 11-Funktionen können Entwickler mehr Zufälligkeit erreichen und verzerrte Ergebnisse in ihren Anwendungen vermeiden.
Das obige ist der detaillierte Inhalt vonSo generieren Sie wirklich zufällige Zahlen in C: Reicht „rand()' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!