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

War es hilfreich?

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
scroll top