2012-03-08 4 views
0

나는 64 비트 시스템에서의 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 비트가있는 긴 이중 발전기가 필요합니다. 그것은 64 비트의 경우

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

같은 부스트에 정의되어 mt19937_64를 사용하는 것이 필요하다.

+0

문제가 해결되지 않았습니다. 여기에 불만 : random/detail/large_arithmetic.hpp (boost 버전 1.49.0) 줄 99-100 –

+0

Strange. 나는 작은 시험을 만들었다. VC10에서 경고 나 오류 메시지가 컴파일되지 않습니다. 다음은 소스 코드에 대한 [link] (http://ideone.com/XwHaL)입니다. 주석에 코드를 게시하는 것은 불가능합니다. 한계 초과. VC10에서 문제없이 컴파일됩니다. 온라인 컴파일러는'mt19937_64' 클래스가 없어서 에러를냅니다. 컴파일 할 수없는 샘플 코드를 게시 할 수 있습니까? – megabyte1024

+0

그래서 경고가 나타나지만 어쨌든 작동합니다 ... xD Thanks. –

관련 문제