Heim > Backend-Entwicklung > C++ > Wie verbessert C 11 die Erzeugung von Zufallszahlen?

Wie verbessert C 11 die Erzeugung von Zufallszahlen?

Patricia Arquette
Freigeben: 2024-12-06 01:17:09
Original
930 Leute haben es durchsucht

How Does C  11 Improve Random Number Generation?

Zufallszahlengenerierung in C 11: Eine umfassende Erklärung

Hintergrund

C 11 führte neue Funktionen zur Generierung von Zufallszahlen ein, um die Flexibilität zu erhöhen, Leistung und Konsistenz. Zu diesen Funktionen gehören Zufallszahlen-Engines und -Verteilungen, die die Einschränkungen herkömmlicher Zufallszahlengeneratoren wie rand() beheben.

Zufallszahlen-Engines

Engines sind der Kern der Zufallszahlengenerierung. Sie erzeugen Folgen von Pseudozufallszahlen und sorgen für eine gleichmäßige Verteilung. C 11 bietet mehrere Engine-Optionen, darunter:

  • Linearer Kongruentialgenerator (LCG): Ein klassischer Algorithmus mit begrenzter Periode.
  • Mersenne Twister (MT): Eine beliebte Wahl mit langer Laufzeit und guter Verbreitung Eigenschaften.

Verteilungen

Verteilungen beschreiben die gewünschte Zufallszahlenverteilung. C 11 enthält Verteilungen zum Erzeugen von:

  • Gleichmäßige ganze Zahlen: Gleichmäßige Verteilung über einen Bereich.
  • Normal-/Gaußsche Verteilung: Verteilung mit einem angegebenen Mittelwert und einer bestimmten Standardabweichung.

So generieren Sie Zufallszahlen

Um Zufallszahlen in C 11 zu generieren, befolgen Sie diese Schritte Schritte:

  1. Eine Engine einrichten: Wählen Sie eine Engine aus und setzen Sie sie mit einem eindeutigen Startwert.
  2. Verteilungen erstellen: Definieren Verteilungen basierend auf Ihren gewünschten Eigenschaften.
  3. Zufallszahlen generieren: Verwenden Sie die Engine, um Zufallszahlen zu generieren Zahlen entsprechend der angegebenen Verteilung.

Beispielcode

#include <random>

// Engine
std::mt19937 rng(std::random_device()());

// Distributions
std::uniform_int_distribution<uint32_t> uint_dist;
std::normal_distribution<double> normal_dist(0.5, 0.2);

// Generate random numbers
while (true)
{
  std::cout << uint_dist(rng) << " "
            << normal_dist(rng) << std::endl;
}
Nach dem Login kopieren

Bedeutung gleich wahrscheinlicher Ergebnisse

Gleichwahrscheinliche Ergebnisse stellen sicher, dass jede Zahl innerhalb des angegebenen Bereichs liegt die gleiche Chance, generiert zu werden, vermeiden Verzerrungen bei der Generierung von Zufallszahlen. Richtige Verteilungen, wie sie beispielsweise in bereitgestellt werden, erreichen dies, indem sie die generierten gleichmäßigen Zufallszahlen in die gewünschte Verteilung umwandeln.

Überlegungen zur Parallelität

Zufallszahlengenerierung in C 11 unterstützt Parallelität. Um die Thread-Sicherheit zu gewährleisten, weisen Sie jedem Thread eine eigene Engine mit einem eindeutigen Startwert zu oder synchronisieren Sie den Zugriff auf das Engine-Objekt.

Das obige ist der detaillierte Inhalt vonWie verbessert C 11 die Erzeugung von Zufallszahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage