Heim >Backend-Entwicklung >C++ >Wie können wir wirklich gleichmäßig verteilte Zufallszahlen in einem bestimmten Bereich erzeugen?

Wie können wir wirklich gleichmäßig verteilte Zufallszahlen in einem bestimmten Bereich erzeugen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-20 15:43:17189Durchsuche

How Can We Generate Truly Uniformly Distributed Random Integers in a Specified Range?

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!

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