Использование boost для (псевдо) генератора случайных чисел long double - PullRequest
0 голосов
/ 08 марта 2012

Я пытаюсь использовать повышение для генерации случайных чисел длинных двойников (на 64-битной машине).

В какой-то момент я использую

rng = boost::mt19937();

Однако компилятор утверждает, чтов строке 88 файла boost / random / mersenne_twister.hpp,

x[i] = (1812433253UL * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask;

происходит неявное преобразование, которое сокращает 64-разрядное значение до 32-разрядного ...

Я не сделалЯ даже не уточнил, хочу ли я длинный двойной или двойной ... почему он спорит по этому поводу?Это потому, что я использую 64-битную ОС?

Есть ли простое решение этой проблемы?Мне нужен длинный двойной генератор ... xD

Спасибо

1 Ответ

1 голос
/ 08 марта 2012

mt19937 - 32 бита.В бусте это определяется как

typedef mersenne_twister_engine<uint32_t,32,624,397,31,0x9908b0df,
11,0xffffffff,7,0x9d2c5680,15,0xefc60000,18,1812433253> mt19937;

Для 64 бит необходимо использовать mt19937_64.

...