0

我正在尝试使用 boost 来生成 long double 的随机数(在 64 位机器上)。

在某些时候我使用

rng = boost::mt19937();

然而,编译器认为在 boost/random/mersenne_twister.hpp 的第 88 行,

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

有一个隐式转换将 64 位缩短为 32 位值...

我什至没有指定我想要一个长的双打还是双打……他为什么要争论这个?是因为我使用的是 64 位操作系统吗?

这个问题有什么简单的解决方案吗?我需要一个长的双发电机... xD

谢谢

4

1 回答 1

1

mt19937是32位的。它是在 boost 中定义的

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

对于 64bit 是必须要使用的mt19937_64

于 2012-03-08T10:01:12.070 回答