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

Wie kann ich in C wirklich einheitliche Zufallszahlen generieren?

Susan Sarandon
Susan SarandonOriginal
2024-12-22 19:42:11629Durchsuche

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';
}

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!

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