Utilisation de boost pour le générateur de nombres (pseudo-)aléatoires de double long
-
09-12-2019 - |
Question
J'essaie d'utiliser boost pour la génération de nombres aléatoires d'un double long (sur une machine 64 bits).
À un moment donné, j'utilise
rng = boost::mt19937();
Cependant, le compilateur affirme qu'à la ligne 88 de boost/random/mersenne_twister.hpp,
x[i] = (1812433253UL * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask;
il existe une conversion implicite qui raccourcit le 64 bits en une valeur de 32 bits...
Je n'ai même pas précisé si je voulais un double long ou un double...pourquoi discute-t-il là-dessus ?Est-ce parce que j'utilise un système d'exploitation 64 bits ?
Existe-t-il une solution simple à ce problème ?J'ai besoin d'un long générateur double...xD
Merci
La solution
Le mt19937
est 32 bits.Il est défini dans le boost comme
typedef mersenne_twister_engine<uint32_t,32,624,397,31,0x9908b0df,
11,0xffffffff,7,0x9d2c5680,15,0xefc60000,18,1812433253> mt19937;
Pour 64 bits, il est nécessaire d'utiliser mt19937_64
.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow