Beste Möglichkeit, mt19937_64 für Monte-Carlo-Simulationen zu verwenden

Ich arbeite an einem Programm, das eine Monte-Carlo-Simulation ausführt. Insbesondere verwende ich einen Metropolis-Algorithmus. Das Programm muss möglicherweise Milliarden von "Zufallszahlen" erzeugen. Ich weiß, dass der Mersenne-Twister für die Monte-Carlo-Simulation sehr beliebt ist, aber ich möchte sicherstellen, dass ich den Generator bestmöglich aussetze.

Gegenwärtig berechne ich einen 32-Bit-Startwert mit der folgenden Methode:

mt19937_64 prng; //pseudo random number generator
unsigned long seed; //store seed so that every run can follow the same sequence
unsigned char seed_count; //to help keep seeds from repeating because of temporal proximity

unsigned long genSeed() {
    return (  static_cast<unsigned long>(time(NULL))      << 16 )
         | ( (static_cast<unsigned long>(clock()) & 0xFF) << 8  )
         | ( (static_cast<unsigned long>(seed_count++) & 0xFF) );
}

//...

seed = genSeed();
prng.seed(seed);

Ich habe das Gefühl, dass es viel bessere Möglichkeiten gibt, um sicherzustellen, dass sich neue Samen nicht wiederholen, und ich bin mir ziemlich sicher, dass mt19937_64 mit mehr als 32 Bit gesät werden kann. Hat jemand irgendwelche Vorschläge?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage