Ich suche nach einer Reihe von portablen Distributionen für die Standard-C ++ 11-Engines wie 'std :: mt19937' (siehe Ссылка ).
Die Engine-Implementierungen funktionieren konsistent (d. h. dieselbe Sequenz wird auf verschiedenen Plattformen generiert - getestet mit Clang und MSVC), aber die Distributionen scheinen auf den verschiedenen Plattformen unterschiedlich implementiert zu sein.
Obwohl die Engines die gleiche Sequenz erzeugen, scheint es, dass eine Distribution (zB std::normal_distribution<double>
) nicht die gleiche Anzahl von Samples (dh unterschiedliche Ergebnisse) auf den verschiedenen Plattformen verwendet, was nicht akzeptabel ist in meinem Fall.
Gibt es vielleicht eine Drittanbieter-Lib, die ich benutzen kann, die den zufälligen Templates von C ++ 11 folgt, aber das wird konsistente Werte über populäre Plattformen liefern (Betrachtet Unterstützung über GCC, MSVC und Clang / llvm).
Optionen, die ich bisher angeschaut habe sind:
Ich brauche Uniform, Normal, Gift und Rayleigh.
Ich habe meine eigenen C ++ 11-Distributionen erstellt:
%Vor%Die gleichmäßige Verteilung scheint gute Ergebnisse zu liefern und die Normalverteilung liefert sehr gute Ergebnisse:
100000 Werte - & gt; 68,159% innerhalb 1 Sigma; 95,437% innerhalb von 2 Sigma; 99,747% innerhalb von 3 Sigma
Die Normalverteilung verwendet die Box-Muller-Methode, die nach dem, was ich bisher gelesen habe, nicht die schnellste Methode ist, aber sie läuft mehr schnell genug für meine Anwendung.
Sowohl die Uniform- als auch die Normalverteilung sollten mit jeder C ++ 11-Engine funktionieren (getestet mit std :: mt19937) und liefert die gleiche Sequenz auf allen Plattformen , was genau das ist, was ich wollte.