2012-03-08 62 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