Um Zufallszahlen innerhalb eines angegebenen Intervalls [min, max ] einheitlich sollten die folgenden Richtlinien sein berücksichtigt:
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.
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'; }
C 11 bietet zusätzliche Zufallszahlengeneratoren mit verschiedenen Verteilungen, wie z wie Bernoulli, Poisson und normal.
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';}); }
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!