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

Wie kann ich in C wirklich einheitliche Zufallszahlen innerhalb eines bestimmten Bereichs generieren?

Barbara Streisand
Freigeben: 2024-12-25 15:58:10
Original
151 Leute haben es durchsucht

How can I generate truly uniform random numbers within a specific range in C  ?

Generieren Sie Zufallszahlen gleichmäßig über einen gesamten Bereich

Um Zufallszahlen innerhalb eines angegebenen Intervalls [min, max ] einheitlich sollten die folgenden Richtlinien sein berücksichtigt:

Vermeiden Sie die Verwendung von rand() und dem Modulo-Operator.

Verwenden Sie rand() und den Modulo-Operator, wie gezeigt im angegebenen Codeausschnitt erzeugt möglicherweise keine gleichmäßig verteilten Zufallszahlen. Dies hängt vom Bereich und dem Wert von RAND_MAX ab.

C 11 Uniform Integer Distribution

Mit C 11 können Sie kann std::uniform_int_distribution verwenden, um Zufallszahlen innerhalb eines zu generieren Bereich:

#include <iostream>
#include <random>

int main() {
    const int range_from = 0;
    const int range_to = 1000;
    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 Zufallszahlengeneratoren

C 11 bietet zusätzliche Zufallszahlengeneratoren mit verschiedenen Verteilungen, wie z wie Bernoulli, Poisson und normal.

Container mischen

Um einen Container zufällig zu mischen, verwenden Sie std::shuffle:

#include <iostream>
#include <random>
#include <vector>

int main() {
    std::vector<int> vec = {4, 8, 15, 16, 23, 42};

    std::random_device random_dev;
    std::mt19937 generator(random_dev());

    std::shuffle(vec.begin(), vec.end(), generator);
    std::for_each(vec.begin(), vec.end(), [](auto i){std::cout << i << '\n';});
}
Nach dem Login kopieren

Boost.Random

Wenn C 11 nicht verfügbar ist, können Sie es verwenden Boost.Random bietet eine Schnittstelle ähnlich der Zufallszahlengenerierung von C 11 Einrichtungen.

Das obige ist der detaillierte Inhalt vonWie kann ich in C wirklich einheitliche Zufallszahlen innerhalb eines bestimmten Bereichs 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