Es ist problematisch, aber der Standard spezifiziert leider nicht im Detail, welcher Algorithmus zu verwenden ist, wenn (viele) zufällig verteilte Zahlen konstruiert werden, und es gibt mehrere gültige Alternativen mit unterschiedlichen Vorteilen.
26.6.8.5 Normale Verteilungen [ Rand. dist.norm] 26.6.8.5.1 Klasse template normal_distribution [rand.dist.norm.normal]
A normal_distribution Zufallszahlenverteilung erzeugt Zufallszahlen x verteilt entsprechend der Wahrscheinlichkeitsdichtefunktion
Parameter & mgr; und auch als diese Verteilung der Mittelwert und Standardabweichung bekannt.
Der häufigste Algorithmus für normalverteilte Zahlen zu erzeugen ist Box-Muller, aber selbst mit diesem Algorithmus gibt es Optionen und Variationen.
Die Freiheit wird auch ausdrücklich in der Norm erwähnt:
26.6.8 Zufallszahlenverteilung Klassenvorlagen [rand.dist] . . .
3 Die Algorithmen zum Erstellen jeder der angegebenen Verteilungen sind Implementierung definiert.
eine GOTO-Optionen hierfür ist boost random
By the way, wie @Hurkyl weist darauf hin: Es scheint, dass die beiden Implementierungen tatsächlich die gleichen sind: Zum Beispiel Box-muller Wertepaare erzeugt, von denen man wird zurückgegeben und einmal zwischengespeichert wird. Die beiden Implementationen unterscheiden sich nur in dem von den Werten zurückgeführt wird.
Ferner kann die Zufallszahl Motoren vollständig angegeben werden und wird die gleiche Sequenz zwischen Implementierungen geben, aber Pflege benötigt, da die verschiedenen Verteilungen genommen werden können auch unterschiedliche Mengen an Zufallsdaten, um zu konsumieren produzieren ihre Ergebnisse, die die Motoren nicht mehr synchron setzen.
Faszinierend. Ich hätte erwartet, dass sie 100% verschiedene oder 100% identische Zahlen haben. Die Tatsache, dass sie gleich sind, aber neu arrangiert sind, macht mir einen Strich durch die Rechnung. –
Und 'uniform_real_distribution' Ergebnisse sind wie erwartet gleich! – DuckQueen
@MooingDuck: Der Standardalgorithmus erzeugt hier zwei Werte für jede Iteration. Es sieht so aus, als ob sie beide die gleiche Implementierung des Algorithmus verwenden, sich aber unterscheiden, welcher der beiden Werte zurückgegeben wird und welcher zwischengespeichert wird. – Hurkyl