Heim >Backend-Entwicklung >C++ >Wie kann ich in C wirklich erwartungstreue zufällige ganze Zahlen generieren?

Wie kann ich in C wirklich erwartungstreue zufällige ganze Zahlen generieren?

Susan Sarandon
Susan SarandonOriginal
2024-12-25 15:01:09197Durchsuche

How Can I Generate Truly Unbiased Random Integers in C  ?

Unvoreingenommene Generierung zufälliger Ganzzahlen mit std::random_device

Beim Streben nach der Generierung gleichmäßig verteilter Zufallszahlen rühren die anfänglichen Bedenken von den Mängeln her der Verwendung von rand(). Um diese Probleme anzugehen, bietet die C-Standardbibliothek eine robustere und effizientere Lösung.

Die Grundlage der Zufallszahlengenerierung liegt in der Verwendung einer Zufallszahlen-Engine, die mit einer externen Quelle gesät wird. In diesem Fall dient std::random_device als Seeding-Mechanismus und stellt einen nicht deterministischen Anfangswert bereit, der zum Generieren nachfolgender Zufallszahlen verwendet wird.

Die bevorzugte Wahl für die Zufallszahlen-Engine ist std::mt19937 , unter Verwendung des Mersenne-Twister-Algorithmus. Diese Engine weist hervorragende statistische Eigenschaften auf und hat sich als äußerst leistungsfähig erwiesen.

Um unverzerrte Zufallszahlen innerhalb eines bestimmten Bereichs zu generieren, verwenden wir std::uniform_int_distribution. Diese Verteilung stellt sicher, dass alle Werte innerhalb des Bereichs mit gleicher Wahrscheinlichkeit ausgewählt werden.

Der folgende Code fasst diese Konzepte zusammen:

#include <random>

std::random_device rd;
std::mt19937 rng(rd());
std::uniform_int_distribution<int> uni(min, max);

auto random_integer = uni(rng);

Durch die Verwendung dieses Ansatzes können Entwickler auf die Einheitlichkeit vertrauen ihrer zufällig generierten Ganzzahlen, wodurch mögliche Verzerrungen beseitigt und zuverlässige und vorhersehbare Ergebnisse gewährleistet werden.

Das obige ist der detaillierte Inhalt vonWie kann ich in C wirklich erwartungstreue zufällige ganze Zahlen generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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