C++ 用boost实现长双精度(伪)随机数发生器

C++ 用boost实现长双精度(伪)随机数发生器,c++,boost-random,C++,Boost Random,我正在尝试使用boost生成长双精度随机数(在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位值 我甚至没有指定我想要一个长双人床还是双人床。。。他为什么要争论这个问题?是因为我

我正在尝试使用boost生成长双精度随机数(在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


谢谢

mt19937的
32位。它是在类似于boost的

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

对于64位,必须使用mt19937\u 64

它也不起作用:现在这里抱怨:random/detail/large\u算术.hpp(boost版本1.49.0)的第99-100行奇怪。我创建了一个小测试。在VC10上编译时没有任何警告或错误消息。下面是源代码的一个示例。不可能在注释中发布代码。超出限制。它在VC10上编译没有问题。由于缺少
mt19937\u 64
类,联机编译器会产生错误。你能发布你的不可编译的示例代码吗?