Wie definieren Sie "portabel"?
Wenn Sie unter "portabel" meinen, dass "binäre identische Folgen von Zufallszahlen bei gleicher Eingabe erzeugt werden", dann ist rand
nicht tragbar. Und ja, die C ++ - Zufallsgeneratoren sind portabel (die meisten von ihnen. Nicht std::default_random_engine
oder std::random_device
), weil sie spezifische Algorithmen implementieren. rand
darf alles sein, solange es einem Zufallszahlengenerator nicht völlig unähnlich ist.
Davon abgesehen, wie @PeteBecker sagte, sind die Distributionen selbst nicht so gut definiert. Also, während std::mt19937
die gleiche Sequenz von Werten für einen gegebenen Startwert erzeugt, werden andere std::uniform_int_distribution
s kann unterschiedliche Werte für die gleiche Eingabesequenz und den gleichen Bereich angeben.
Wenn Sie Konsistenz benötigen, können Sie natürlich immer Ihre eigene Distribution definieren.
Die in <random>
beschriebenen Zufallszahlen-Engines haben explizite Anforderungen an ihre Algorithmen, um die Portabilität sicherzustellen. Die Distributionen nicht.
Sie können "identische Folgen von Zufallszahlen bei gleicher Eingabe" (von @Nicol Bolas) mit std generieren: mt19937 (Mersenne Twister) zum Beispiel. Das konnte man definitiv nicht mit rand()
machen, was ziemlich nervig war.
Verwandte Fragen: