Utilisation de boost pour le générateur de nombres (pseudo-)aléatoires de double long

StackOverflow https://stackoverflow.com//questions/9615622

  •  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

Était-ce utile?

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