„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich in C++ gleichmäßig verteilte Zufallszahlen innerhalb eines bestimmten Bereichs generieren?

Wie kann ich in C++ gleichmäßig verteilte Zufallszahlen innerhalb eines bestimmten Bereichs generieren?

Veröffentlicht am 21.12.2024
Durchsuche:500

How Can I Generate Uniformly Distributed Random Numbers Within a Specific Range in C  ?

Gleichmäßige Zufallszahlengenerierung über einen Bereich hinweg

Sie suchen nach einer Methode zur gleichmäßigen Generierung von Zufallszahlen innerhalb eines bestimmten Bereichs [Min., Max.].

Fehler bei rand

Ihre aktuelle Implementierung mit rand() und dem Modulo-Operator gewährleistet möglicherweise keine gleichmäßige Verteilung, da ihr Verhalten davon abhängt auf RAND_MAX und dem Bereich selbst.

C 11 und Uniform Range Generation

In C 11 bietet std::uniform_int_distribution eine auf diesen Bedarf zugeschnittene Lösung:

#include 

std::uniform_int_distribution distr(min, max);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());

int random_number = distr(generator);

Zusätzliche Funktionen von

Der -Header bietet eine große Auswahl an Zufallszahlengeneratoren mit unterschiedlichen Verteilungen, z wie Bernoulli, Poisson und normal.

Container Mischen

Um einen Container zu mischen, verwenden Sie std::shuffle:

#include 
#include 

std::vector vec = {4, 8, 15, 16, 23, 42};
std::random_device random_dev;
std::mt19937 generator(random_dev());

std::shuffle(vec.begin(), vec.end(), generator);

Boost.Random

Wenn die Verwendung eines C 11-Compilers nicht möglich ist , denken Sie an Boost.Random, das über eine ähnliche Schnittstelle wie das C 11-Gegenstück verfügt.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3