Heim  >  Artikel  >  Backend-Entwicklung  >  Zufallszahlengenerierung in C++

Zufallszahlengenerierung in C++

WBOY
WBOYOriginal
2023-08-22 12:10:516150Durchsuche

Zufallszahlengenerierung in C++

Zufallszahlengenerierung ist ein wichtiger Teil der Computerprogrammierung. Auch in der C++-Programmierung sind Zufallszahlen weit verbreitet und können zur Simulation von Daten, zur Generierung von Testdaten, zur Spieleentwicklung usw. verwendet werden. In diesem Artikel werden verschiedene Methoden zur Zufallszahlengenerierung in der C++-Sprache vorgestellt.

Pseudozufallszahlengenerierung

Der Pseudozufallszahlengenerierungsalgorithmus ist eine Methode zur Zufallszahlengenerierung, die in den meisten Programmen verwendet wird. Es handelt sich nicht um eine echte Zufallszahl, sondern um eine Pseudozufallszahl, die durch einen bestimmten mathematischen Algorithmus generiert wird. In C++ können Sie die Rand-Funktion verwenden, um Pseudozufallszahlen zu generieren.

rand-Funktion ist in der Header-Datei stdlib.h definiert. Es gibt eine Zufallszahl vom Typ int im Bereich von 0 bis RAND_MAX zurück. RAND_MAX ist in der Header-Datei stdlib.h definiert und hat normalerweise den Wert 32767.

Beispielcode:

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
    // 设置随机数种子
    srand(time(0));
    
    // 生成10个随机数
    for(int i = 0; i < 10; i++)
    {
        cout << rand() << endl;
    }
    
    return 0;
}

Im obigen Code wird die Srand-Funktion verwendet, um den Zufallszahlen-Startwert festzulegen, und time(0) kann die Anzahl der Sekunden der aktuellen Zeit abrufen, sodass die Ergebnisse der Ausführung des Programms vorliegen jedes Mal anders. Verwenden Sie dann eine for-Schleife, um 10 Zufallszahlen zu generieren und diese auf dem Bildschirm auszugeben.

Es ist zu beachten, dass die Rand-Funktion bei jedem Aufruf eine eindeutige Zufallszahl zurückgibt. Wenn sie jedoch mehrmals aufgerufen wird, besteht ein gewisser Grad an Korrelation zwischen den Zufallszahlen. Daher müssen bei Verwendung der Rand-Funktion zum Generieren einer großen Anzahl von Zufallszahlen andere Methoden zur Verschleierung verwendet werden.

Echte Zufallszahlengenerierung

Echte Zufallszahlen beziehen sich auf Zufallszahlen, die durch physikalische Phänomene erzeugt werden. Beispielsweise können seismische Wellendaten oder fotoelektrische Eigenschaften über Hardwaregeräte erfasst werden. Diese Hardwaregeräte sind jedoch sehr teuer und für die meisten nicht geeignet Für Programme reicht es aus, einen Pseudozufallszahlen-Generierungsalgorithmus zu verwenden.

Es gibt jedoch einige Anwendungsszenarien, die hochsichere Zufallszahlen erfordern. Um die Sicherheit und Vertraulichkeit der Daten zu schützen, müssen echte Zufallszahlen verwendet werden. In diesem Fall kann ein externes Gerät verwendet werden, um echte Zufallszahlen bereitzustellen. Echte Zufallszahlen können beispielsweise durch Würfeln, Münzwerfen, Losziehen usw. erzeugt werden. Diese Methode ist jedoch nicht nur ineffizient, sondern generiert auch begrenzte Arten von Zufallszahlen.

Die gebräuchlichere Methode besteht darin, echte Zufallszahlen über ein physisches Gerät namens Zufallszahlengenerator (RNG) zu generieren. Es generiert Zufallszahlen durch die Erfassung unvorhersehbarer physikalischer Prozesse oder mathematischer Verfahren und bietet darüber hinaus einige zusätzliche Sicherheitsfunktionen. Allerdings sind die Kosten für die Verwendung eines echten Zufallszahlengenerators viel höher als für die Verwendung eines Pseudozufallszahlen-Generierungsalgorithmus.

Zufallszahlengenerierung in C++ 11

C++ 11 bietet eine neue Zufallszahlenbibliothek, die zwei Teile umfasst: Erstens einen Pseudozufallszahlengenerator, einschließlich mehrerer Algorithmen, die die Anforderungen verschiedener Anwendungsszenarien besser erfüllen können. Der zweite ist a echter Zufallszahlengenerator, der auf die speziell generierten Hardware-Einrichtungen des Systems zugreifen und echte Zufallszahlen zurückgeben kann.

Zu den Zufallszahlengenerierungsbibliotheken in C++ 11 gehören:

  • minstd_rand0: Linearer Kongruenzgenerator
  • minstd_rand: Verbesserter linearer Kongruenzgenerator
  • mt19937: Mersenne Twister 19937-Generator mit besserer Leistung und längerer Laufzeit.
  • m t19937_64: Generator Mersenne Twister 19937, Gibt eine 64-Bit-Ganzzahl zurück.
  • ranlux24_base: LUX-Generator (Level, Uniform, eXcellent), läuft schnell und mit hoher Qualität.
  • ranlux48_base: LUX-Generator (Level, Uniform, eXcellent), gibt 48-Bit-Ganzzahlen zurück, läuft schnell und hat eine hohe Qualität Qualität
  • knuth_b: Knuth-B (T, P)-Generator, generiert vom Standard abweichende Zufallssequenzen mit höherer Qualität

Verwendet Zufallszahlen in C++ 11 Beim Generieren der Bibliothek müssen Sie die Header-Datei random und einschließen Sie können die Funktionen uniform_int_distribution und uniform_real_distribution verwenden, um den Bereich und die Art der Zufallszahlen zu steuern.

Beispielcode:

#include <iostream>
#include <random>

using namespace std;

int main()
{
    // 以当前时间作为种子
    default_random_engine engine(time(nullptr));
    
    // uniform_int_distribution:以等概率生成min到max范围内的整数
    uniform_int_distribution<int> distribution(0, 100);
    cout << distribution(engine) << endl;
    
    // uniform_real_distribution:以等概率生成min到max范围内的浮点数
    uniform_real_distribution<double> r_distribution(0, 100);
    cout << r_distribution(engine) << endl;

    return 0;
}

Im obigen Code wird default_random_engine verwendet, um Zufallszahlen-Seeds zu generieren, und die Bereiche der generierten Ganzzahl- und Gleitkomma-Zufallszahlen werden in uniform_int_distribution bzw. uniform_real_distribution angegeben. Schließlich werden durch den Aufruf der Engine-Funktion Zufallszahlen generiert.

Fazit

Die oben genannten sind einige gängige Methoden zur Zufallszahlengenerierung in C++. Verschiedene Anwendungsszenarien erfordern unterschiedliche Methoden zur Zufallszahlengenerierung, und Sie müssen die geeignete Methode entsprechend der tatsächlichen Situation auswählen. Bei der tatsächlichen Programmierung können Sie die Vorteile von Pseudozufallszahlen und echten Zufallszahlen kombinieren und einige erweiterte Methoden zur Zufallszahlengenerierung verwenden, um die Effizienz und Sicherheit des Programms zu verbessern.

Das obige ist der detaillierte Inhalt vonZufallszahlengenerierung in C++. 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