0

long double の乱数生成に 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ビットOSを使用しているからですか?

この問題の簡単な解決策はありますか? ロングダブルジェネレーターが必要です... xD

ありがとう

4

1 に答える 1

1

mt1993732ビットです。ブーストのように定義されています

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

使用するには64bitが必要mt19937_64です。

于 2012-03-08T10:01:12.070 に答える