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: Reicht „rand()' aus?

Patricia Arquette
Freigeben: 2024-12-24 00:21:20
Original
286 Leute haben es durchsucht

How to Generate Truly Random Numbers in C  :  Is `rand()` Enough?

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage