CenterSpace에서 다운로드 한 메르 센 트위스터의 C# 구현을 사용하고 있습니다. 나는 두 가지 문제가 있습니다 메르 센 트위스터 : 시딩 및 시각화
- 가 아무리 알고리즘을 씨앗 어떻게 DieHard tests을 통과하지 않습니다, 그리고 그하여 내가 P-값 1과 0의 꽤 많이 얻을 의미한다. 또한 269 p 값의 KStest는 0입니다. 음, p 값을 해석 할 수는 없지만, 결과에서 1과 0이 약간 나쁜 뉴스라고 생각합니다.
- 숫자의 임의성을 시각적으로 표시하도록 요청 받았습니다. 그래서 나는 그들이 생성 될 때 숫자를 플롯하고, 이것은 전혀 무작위로 보이지 않습니다. 결과는 after a few seconds과 a few seconds later의 두 스크린 샷입니다. 두 번째 스크린 샷에서 볼 수 있듯이 숫자는 몇 개의 평행선에 표시됩니다. 숫자에 점수를 매기는 다른 알고리즘을 시도했습니다. 그것들은 모두 평행선이되지만 각도가 다릅니다! 이것이이 스크린 샷의 숫자를 점으로 매핑 한 방법입니다 :
new Point(number % _canvasWidth, number % _canvasHeight)
. 추측 할 수 있듯이 시각적 결과는 양식의 너비와 높이에 따라 달라지며 this is은 재앙적인 결과를 낳습니다.- 사용자 항목 :
는 여기에 내가 알고리즘을 씨앗하려고 몇 가지 방법입니다. 몇 가지 숫자를 입력하여 알고리즘을 int 배열로 시드합니다.
- 알고리즘 자체에서 생성 한 난수입니다 !!
- 내가 여기 실종 무엇
new Guid().GetHashCode()
의 배열? 알고리즘을 어떻게 분류해야합니까? DieHard를 어떻게 통과시킬 수 있습니까?
답변 주셔서 감사합니다 fbrereto. 너비와 높이가 동일하다는 사실에 대한 관찰은 사실입니다. 나는 내가 어떻게 그것을 놓쳤는 지 모른다 : 다음은 매핑을 시작한 방법이다 : var x = (int) (number & 0xffff0000); var y = 숫자 & 0x0000ffff; x = x % _canvasWidth; y = y % _canvasHeight; 이것은 사용자의 솔루션과 다소 유사합니다. 그러나, 나는 mod 함수가 여전히 결과를 왜곡한다고 생각합니다. 참고로이 매핑을 사용하면 세로 줄이 나타납니다. –
x 값을 아래로 이동해야합니다. 비트 마스크 이후에 숫자 출력의 상위 2 바이트에 상주합니다.이 숫자는 모두 MOD를 왜곡시킬 수있는 큰 숫자가됩니다. – fbrereto
mod는 결과를 화면에 표시 할 때 항상 약간의 바이어스를 보일 것입니다. 당신이하려고하는 것으로, 커다란 좌표 (창 밖의 좌표) 또는 선형 보간을 그리지 않는 것이 좋습니다. – fbrereto