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
Barbara StreisandOriginal
2024-12-25 15:58:10210Durchsuche

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

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

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!

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