2010-12-03 2 views
4

최근에는 64- 비트 integer (또는 long) 용 MersenneTwister를 구현했습니다. PRNG를 테스트하는 방법에 대한 가이드 나 예제가 있습니까? 그렇다면 구현이 좋은지 충분한 지 알 수 있습니다. 필자는 구현에 충분한 균일 한 분포가 있는지 확인하는 방법에 특별히 관심이 있습니다.PRNG를 테스트하는 방법은 무엇입니까?

더 구체적으로 이것은 Mersenne에 연결되어 있습니다.

답변

11

당신은 메르 센 트위스터 알고리즘을 테스트 할 필요가 없습니다 만 제대로했습니다 여부를 테스트해야 를 구현 연산.

Mersenne Twister web site으로 이동하여 test output을 잡을 수 있습니다. 동일한 출력 순서를 만드는 경우 알고리즘을 올바르게 구현했을 것입니다.

MT 사이트에는 특별히 64 bit machines에 대한 링크가 있고 32 비트 및 64 비트 버전에 대한 다른 테스트 출력이 있습니다.

+0

작은 문제가 하나 있습니다. C는 부호없는 64 비트 정수를 사용합니다. 내 지식으로는 자바는 실제로'long '을 서명하지 않았다. 이 방법으로 생성 된 모든 음수가 아닌'long '이 동일하고 동일한 순서를 가질 경우 두 구현이 모두 동일하다고 가정하는 것이 안전한가요? –

6

PRNG에 대한 표준 테스트 배터리는 Diehard Tests입니다.

+1

가 [TestU01] (http://www.iro.umontreal.ca/~simardr/testu01/tu01.html) 좋습니다. –

2

가장 쉬운 방법 (정말 일반적인 MT 인 경우)은 동일한 시드가있는 알려진 MT 라이브러리와 비교하는 것이 가장 쉽습니다. 그 사람들이 반복 해본 적이 정말 그들이 무슨 일을하는지 알고 - -

+0

그럴 것이지만 두 가지 문제가 있습니다. MT-64 라이브러리 하나만 알고 있지만 테스트해야하는 모든 기능이 없습니다 (nextDnt, nextIntFromRange 등을 구현하면서 nextInt 만 제공함). IIRC에는 MT-64와 MT 생성 시드의 차이가 있으므로 두 번째 라이브러리 (누락 된 기능이 모두 있음)를 사용하여이 방식을 검사 할 수는 없습니다. –

1

알로하!

누군가 다른 사람이 말했듯이 알고리즘에 대해 알려진 답변 테스트 벡터를 사용합니다. 테스트 벡터를 만났다면 발전기가 작동하는지 확실히 판단 할 수 있습니다.

발전기를 실제로 테스트하려면. Dieharder 도구에 의해 구현으로 철저한 테스트를 ++ 사용

http://www.phy.duke.edu/~rgb/General/dieharder.php