Boost für (Pseudo-) Zufallszahlengenerator von Long Double verwenden
-
09-12-2019 - |
Frage
Ich versuche, Boost für die Zufallszahlengenerierung eines langen Doppels (auf einer 64-Bit-Maschine) zu verwenden.
Irgendwann benutze ich
rng = boost::mt19937();
Der Compiler argumentiert jedoch, dass in Zeile 88 von boost/random/mersenne_twister .wasserkraftwerk,
x[i] = (1812433253UL * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask;
es gibt eine implizite Konvertierung, die den 64-Bit-Wert in einen 32-Bit-Wert verkürzt...
Ich habe nicht einmal angegeben, ob ich ein langes Doppel oder ein Doppel haben möchte...warum streitet er darüber?Liegt es daran, dass ich ein 64-Bit-Betriebssystem verwende?
Gibt es eine einfache Lösung für dieses Problem?Ich brauche einen langen Doppelgenerator...xD
Danke
Lösung
Der mt19937
ist 32bit.Es ist im Boost definiert wie
typedef mersenne_twister_engine<uint32_t,32,624,397,31,0x9908b0df,
11,0xffffffff,7,0x9d2c5680,15,0xefc60000,18,1812433253> mt19937;
Für 64bit ist die Verwendung erforderlich mt19937_64
.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow