2012-03-08 61 views
0

我试图使用增长随机数生成长双(在64位机器上)。使用增长(伪)随机数发生器的长双

在某些时候我使用

rng = boost::mt19937(); 

然而,编译器认为,上线升压/无规/ mersenne_twister.hpp 88,

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

存在着缩短了64的隐式转换bit到32位值...

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

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

感谢

回答

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

+0

它没有奏效:现在在这里抱怨:随机/细节/ large_arithmetic.hpp(boost版本1.49.0)的线99-100 – 2012-03-08 15:39:40

+0

奇怪。我创建了一个小测试。在VC10上没有编译任何警告或错误消息。这里是源代码的[链接](http://ideone.com/XwHaL)。在评论中发布代码是不可能的。超出限制。它在VC10上编译没有问题。在线编译器由于缺少'mt19937_64'类而产生错误。你可以发布你的示例代码是不可编译的吗? – megabyte1024 2012-03-08 18:25:23

+0

因此,警告出现,但它仍然有效... xD谢谢。 – 2012-03-09 12:48:27