Heim > Backend-Entwicklung > C++ > Wie kann ich in C wirklich einheitliche Zufallszahlen generieren?

Wie kann ich in C wirklich einheitliche Zufallszahlen generieren?

Susan Sarandon
Freigeben: 2024-12-22 19:42:11
Original
628 Leute haben es durchsucht

How Can I Generate Truly Uniform Random Numbers in C  ?

Zufallszahlen gleichmäßig über einen gesamten Bereich generieren

Sie möchten Zufallszahlen erzeugen, die innerhalb eines bestimmten Intervalls [min, max] gleichmäßig verteilt sind. Ihre aktuelle Methode erzeugt jedoch Zahlen, die um einen einzelnen Punkt gruppiert sind.

Rand() vermeiden

Die Funktion rand() ist beim Generieren gleichmäßiger Verteilungen oft unzuverlässig. Es basiert auf einem Moduloperator, der Verzerrungen einführen kann.

C 11 Gleichverteilung

In C 11 sollten Sie die Verwendung von std::uniform_int_distribution für eine zuverlässigere Lösung in Betracht ziehen:

#include <iostream>
#include <random>

int main()
{    
    const int range_from  = min;
    const int range_to    = max;
    std::random_device                  rand_dev;
    std::mt19937                        generator(rand_dev());
    std::uniform_int_distribution<int>  distr(range_from, range_to);

    std::cout << distr(generator) << '\n';
}
Nach dem Login kopieren

Andere Zufallsgeneratoren

Die C 11-Bibliothek bietet verschiedene andere Zufallsgeneratoren mit unterschiedlichen Verteilungen. Beispielsweise kann std::shuffle die Elemente eines Containers zufällig neu anordnen.

Boost.Random-Alternative

Wenn C 11 nicht verfügbar ist, sollten Sie Boost.Random verwenden, das eine ähnliche Funktionalität bietet.

Das obige ist der detaillierte Inhalt vonWie kann ich in C wirklich einheitliche Zufallszahlen generieren?. 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