对long(双)伪随机数生成器使用boost

时间:2012-03-08 09:48:41

标签: 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位值...

我甚至没有说明我是想要长一双还是双...他为什么要争论呢?是因为我使用的是64位操作系统吗?

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

由于

1 个答案:

答案 0 :(得分:1)

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