나는 대답이 ' 수학 때문에 '라고 생각 하지만 누군가가 기본 수준에서 조금 더 통찰력을 줄 수 있기를 바랐습니다 ...
오늘 BCL 소스 코드를 살펴보면서 이전에 사용한 클래스 중 일부가 실제로 어떻게 구현되었는지 살펴 보았습니다. 나는 이전에 (의사) 난수를 생성하는 방법에 대해 생각하지 않았으므로 어떻게 수행되었는지 확인하기로 결정했습니다.
전체 소스 : http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
이 MSEED 값은 Random () 클래스가 시드 될 때마다 사용됩니다.
어쨌든, 나는이 '매직 넘버'(161803398)를 보았는데 왜 그 넘버가 선택되었는지에 대한 가장 어리석은 생각이 없습니다. 소수 또는 2의 거듭 제곱이 아닙니다. 더 중요한 것처럼 보이는 숫자의 절반은 아닙니다. 나는 바이너리와 16 진수로 그것을 보았고 잘 나에게 숫자처럼 보였습니다.
Google에서 번호 검색을 시도했지만 아무것도 찾지 못했습니다.
The current implementation of the Random class is based on Donald E. Knuth's subtractive random number generator algorithm. For more information, see D. E. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, second edition, 1981.
inextp = 31;
지지만, Random
클래스 의 소스 코드는 inextp = 21;
누군가가 잘못 입력 하여이 버그를 일으킨 것처럼 그것을 가지고 있습니다 .