Heim >Backend-Entwicklung >C++ >Wie können wir wirklich gleichmäßig verteilte Zufallszahlen in einem bestimmten Bereich erzeugen?
Generieren gleichmäßig verteilter zufälliger Ganzzahlen
In vielen Programmieranwendungen ist die Generierung zufälliger Ganzzahlen innerhalb eines bestimmten Bereichs eine häufige Anforderung. Es stellt jedoch eine Herausforderung dar, sicherzustellen, dass diese ganzen Zahlen gleichmäßig verteilt sind. In diesem Artikel werden verschiedene Ansätze zum Erreichen einer gleichmäßigen Verteilung untersucht.
Vorhandener Code und Einschränkungen
Der vom Benutzer bereitgestellte Code nutzt die Funktion rand(), um Zufallszahlen innerhalb eines zu generieren angegebenen Bereich. Dieser Ansatz leidet jedoch unter einem Mangel an Einheitlichkeit, insbesondere bei kleinen Bereichen wie <0, 1>. Dies ist auf die geringe Wahrscheinlichkeit zurückzuführen, dass rand() den Maximalwert RAND_MAX zurückgibt.
Vorgeschlagene Formel
Um dieses Problem zu beheben, hat der Benutzer eine neue Formel entwickelt:
( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
Obwohl diese Formel darauf abzielt, die Einheitlichkeit zu verbessern, reicht sie immer noch nicht aus, wie Stichproben belegen Daten.
C-Standardbibliothekslösung
Die C-Standardbibliothek bietet eine elegante und zuverlässige Lösung für dieses Problem. Der std::random-Header enthält eine Reihe von Zufallszahlengeneratoren und -verteilungen, die Zufallszahlen mit gleichmäßiger Verteilung generieren können.
#include <random> // Initialize random-number engine with a seed std::random_device rd; std::mt19937 rng(rd()); // Define uniform integer distribution std::uniform_int_distribution<int> uni(min, max); // Generate random integer within range auto random_integer = uni(rng);
Dieser Ansatz nutzt gut getesteten und optimierten Code und sorgt so für gleichmäßige Verteilung und Effizienz. Dadurch entfällt die Notwendigkeit, das Rad neu zu erfinden, und es entfällt die Sorge um Bias oder Seed-Werte.
Das obige ist der detaillierte Inhalt vonWie können wir wirklich gleichmäßig verteilte Zufallszahlen in einem bestimmten Bereich erzeugen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!