Heim >Backend-Entwicklung >C++ >Wie kann ich in C gleichmäßig verteilte zufällige ganze Zahlen generieren?

Wie kann ich in C gleichmäßig verteilte zufällige ganze Zahlen generieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-24 20:17:11847Durchsuche

How Can I Generate Uniformly Distributed Random Integers in C  ?

Generieren gleichmäßig verteilter zufälliger Ganzzahlen

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.

Ein einfacher Ansatz

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.

Die C-Standardbibliothek zum Rettung

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:

  • Geschwindigkeit: Die Standardbibliotheksimplementierung ist hocheffizient, selbst für die Generierung großer Mengen von Zufallszahlen.
  • Gleichmäßige Verteilung: Die Die Funktion std::uniform_int_distribution gewährleistet eine unvoreingenommene und gleichmäßige Verteilung der generierten Zahlen.
  • Variablenbereiche: Die Verteilung kann durch Festlegen der Min- und Max-Parameter an jeden Bereich von Ganzzahlen angepasst werden.
  • Seedability: Der rd-Parameter bietet eine Möglichkeit, den Generator mit einem bestimmten Wert zu versehen, um eine Reproduzierbarkeit zu gewährleisten.

A Überlegene Lösung

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!

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