我正在尝试使用升压的长双(在64位机器上)。

在某个点我使用

rng = boost::mt19937();
. 但是,编译器争辩说,在Boost / Aquord / mersenne_twister的第88行上.hpp,
x[i] = (1812433253UL * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask;
.

存在隐式转换,将64位缩短为32位值...

我甚至没有指定,如果我想要长双或双倍......为什么他争论?是因为我正在使用64位操作系统?

是否有任何简单的解决问题?我需要一个长双发电机... xd

感谢

有帮助吗?

解决方案

mt19937是32位。它在升压中定义为

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

对于使用mt19937_64需要64位。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top