Sie sagen in den Kommentaren, dass Sie nicht die Möglichkeit haben, einen besseren Zufallszahlengenerator zu wählen. Das ist eine Schande, denn C++ hat the random
header seit C++ 11, und es ist gegenüber dem alten rand
/srand
erheblich verbessert.
Es gibt definitiv eine Korrelation zwischen dem Samen, den Sie in srand
verwenden, und den daraus resultierenden Zahlen, die Sie aus rand
ziehen, das ist der Sinn des Seeding. Einige C++ - Implementierungen machen dies offensichtlicher als andere, da die Implementierung von rand
nicht genau spezifiziert ist und jeder Bibliothek überlassen wird.
Die einfachste Möglichkeit, diese Korrelation zu verbergen, besteht darin, nach dem Seeding ein paar Zufallszahlen zu nehmen und sie einfach wegzuwerfen, da die Korrelation mit jeder generierten Zahl weniger offensichtlich wird. Wenn nicht, wäre es kein akzeptabler Zufallszahlengenerator.
srand(1);
cout << "throwing away " << rand() << endl;
cout << "throwing away " << rand() << endl;
cout << "using " << rand() << endl;
srand(2);
cout << "throwing away " << rand() << endl;
cout << "throwing away " << rand() << endl;
cout << "using " << rand() << endl;
Schlagen Sie in '' sehen die neuen Funktionen untersuchen: http://en.cppreference.com/w/cpp/header/random besonders 'mt19937' Hinsichtlich' rand() ': _“ Es gibt keine Garantien hinsichtlich der Qualität der erzeugten Zufallssequenz. "_ Http://en.cppreference.com/w/cpp/numeric/random/rand –
Sie sollten' srand' nicht mit einer konstanten Zahl verwenden. Ihr Programm wird bei jedem Start die gleiche Sequenz geben. – mch
Nicht verwandt mit Ihrer Frage (na ja, zu Ihrem möglichen Problem sowieso), aber ich schlage vor, dass Sie beginnen, die neuen [Pseudo-Zufallszahlengenerierungsklassen] (http://en.cppreference.com/w/cpp/numeric/random) in zu verwenden C++. –