Ich versuche, qualitativ hochwertige Zufallszahlen im Bereich (0,1) in meinem Projekt zu generieren, und ich habe versucht, die uniform_real_distribution
aus einem Beispielcode von here testen. Als ich ihm den Code lief es funktionierte gut, aber wenn ich mit Impfen des Generators, das gleiche zu ändern versuche, wie:uniform_real_distribution gibt keine gleichmäßige Verteilung
#include <random>
#include <iostream>
#include <chrono>
using namespace std;
// obtain a seed from the system clock:
unsigned seed = static_cast<int> (chrono::system_clock::now().time_since_epoch().count());
// globally defining the generator and making it static for safety because in the
// actual project this might affect the flow.
static default_random_engine gen(seed);
uniform_real_distribution<double> distribution(0.0,1.0);
int main(){
const int nrolls=10000; // number of experiments
const int nstars=95; // maximum number of stars to distribute
const int nintervals=10; // number of intervals
int p[nintervals]={};
for (int i=0; i<nrolls; ++i) {
double number = distribution(gen);
++p[int(nintervals*number)];
}
std::cout << "uniform_real_distribution (0.0,1.0):" << std::endl;
std::cout << std::fixed; std::cout.precision(1);
for (int i=0; i<nintervals; ++i) {
std::cout << float(i)/nintervals << "-" << float(i+1)/nintervals << ": ";
std::cout << std::string(p[i]*nstars/nrolls,'*') << std::endl;
}
return 0;
}
Die Zufallszahlen wurden nicht gleichmäßig verteilt ist. Der Ausgang desselben, wenn sie ausgeführt wird wiederholt:
F: \ path> randtest
uniform_real_distribution (0.0,1.0):
0,0-0,1: *********
0.1-0.2: **********
0.2-0.3: ********
0.3-0.4: ******** *
0.4-0.5: *********
0.5-0.6: *********
0.6-0.7: ******** *
0.7-0.8: *********
0.8-0.9: *********
0.9-1.0: ******* ***
F: \ Pfad> Randtest
uniform_real_distribution (0.0,1.0):
0.0-0.1: *********
0.1-0.2: *********
0.2- 0,3: *********
0.3-0.4: *********
0.4-0.5: *********
0,5 -0,6: *********
0.6-0.7: *********
0.7-0.8: *********
0.8-0.9: *********
0,9-1,0: *********
F: \ path> randtest
uniform_real_distribution (0.0,1.0):
0,0-0,1: **** *****
0.1-0.2: *********
0.2-0.3: *********
0,3-0,4: *********
0,4-0,5: **********
0,5-0,6: *********
0.6-0.7: *********
0.7-0.8: *********
0,8-0,9: *********
0.9-1.0: *********
Liegt es an der Aussaat? Oder ist es besser, einen anderen Generator zu verwenden?
Ich benutze G ++ 5.1.0 Compiler C++ 11 Standards.
Das sieht ziemlich einheitlich für mich aus. Erwarten Sie, dass die Ergebnisse jedes Mal perfekt gleichmäßig verteilt werden? –
Ja. Diese Funktion wird als Mehrfachzeit bezeichnet und jedes Ergebnis wird miteinander verglichen. Gibt es also eine Möglichkeit, es perfekt zu verteilen? – akki
Konsultieren Sie einen Statistiker, wenn das für Sie sehr wichtig ist, aber ich schätze, Ihre Stichprobe ist zu klein. Wenn ich 'nrolls 'um 10X vergrößere, bekomme ich eine visuell einheitliche Verteilung. – RegularlyScheduledProgramming