2012-03-08 20 views
0

私は64ビットマシン上のlong doubleの乱数生成のためにboostを使用しようとしています。私はlong doubleの(擬似)乱数ジェネレータのためのブーストの使用

rng = boost::mt19937(); 

を使用し、いくつかの時点で

はしかし、コンパイラは、ブースト/ランダム/ mersenne_twister.hppのライン88、

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

に短縮暗黙の変換があることを主張している64ビットを32ビットの値に変換します...

私は長いダブルまたはダブルをしたいと指定していませんでした...なぜ彼はそれについて主張していますか?私は64ビットOSを使用しているからですか?

この問題を解決する簡単な方法はありますか?私は... xDで

おかげ

答えて

1

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ビットが必要です。

+0

これはうまくいきませんでした:ここで不平を言ってください:random/detail/large_arithmetic.hpp(boostバージョン1.49.0)の行99-100 –

+0

Strange。私は小さなテストを作成しました。 VC10で警告やエラーメッセージがコンパイルされることはありません。ここにソースコードへの[リンク](http://ideone.com/XwHaL)があります。コメントにコードを投稿することは不可能です。限界の外です。これはVC10で問題なくコンパイルされます。オンラインコンパイラは 'mt19937_64'クラスがないためにエラーが発生します。コンパイルできないサンプルコードを投稿できますか? – megabyte1024

+0

警告が表示されますが、とにかく動作します... xDありがとうございます。 –

関連する問題