`(seed * 9301 + 49297) % 233280` 랜덤 알고리즘의 원래 소스는?


9

시드 (의사) 난수 생성기를 생성하는 예를 검색하면 다음과 같은 결과가 발생합니다 (구체적인 예 : http://indiegamr.com/generate-repeatable-random-numbers-in-js/ ).

// the initial seed
Math.seed = 6;

// in order to work 'Math.seed' must NOT be undefined,
// so in any case, you HAVE to provide a Math.seed
Math.seededRandom = function(max, min) {
    max = max || 1;
    min = min || 0;

    Math.seed = (Math.seed * 9301 + 49297) % 233280;
    var rnd = Math.seed / 233280;

    return min + rnd * (max - min);
}

이러한 특정 숫자 (9301, 49297, 233280)와 알고리즘은 계속해서 사용되지만 아무도 이에 대한 명확한 참조가없는 것 같습니다. 누가이 알고리즘을 발명하고 배포를 테스트 했습니까? 인용 할 종이나 무언가가 있습니까?


5
그것은 선형 합동 발생기 이지만 상당히 작은 기간을 가지고 있습니다 (32 비트 정수는 40 억의 기간을 허용합니다
래칫 괴물

1
사람들은 종종 책에서 직접 코드를 복사하므로 아마도 오래된 책에서 나온 것일 수 있으며 여러 번 복사되었습니다. 또한 제한적인 경우 인 것 같습니다. 아마도 도움이 될 것입니다 : heydari.persiangig.com/Ebooks/Applied_Crypto-Ch11-ch20.pdf/… ict.griffith.edu.au/anthony/info/C/RandomNumbers
barrycarter

2
원점이 무엇이든 시드 계산에 사용되는 값은 끔찍합니다.

3
@ jlarson의 의견은 거의 길지 않지만 두 가지 문제가 있습니다. 먼저, 래칫 괴물이 암시하는 것처럼 모듈로는 최대 기간, 즉 발전기 자체가 반복되기 전의 고유 숫자의 수입니다. 실제 기간은 더 작을 수 있습니다. 둘째, 다른 두 숫자 (주로 배수)는 모듈로 숫자 보다 상대적으로 소수 여야 더 긴 기간을 보장 할 수 있습니다. 이상적으로 모듈로 수는 데이터 유형에 맞는 최대 양의 정수보다 작은 최대 소수이고 다른 두 숫자도 큰 소수입니다.

1
이것이 부수적 인 토론이고 실제 답변을 추가하는 것이이 질문에 적합하지 않다는 점을 감안할 때 그 숫자가 끔찍한 이유의 짧고 짧은 버전입니다. 기술적으로 의사 난수 알고리즘도 프로그래머에게 주제가 있지만 Wikipedia수학 또는 컴퓨터 과학에 대한 자세한 내용은 튀는 것이 좋습니다 .

답변:


7

Google 도서를 빠르게 검색하면 다음 번호 (9301, 49297, 233280)가 여러 참조에 사용되었습니다.

  • FORTRAN 77의 수치 레시피
  • C ++의 수치 방법 소개
  • CGI 개발자 리소스 : TCL 및 PERL의 웹 프로그래밍
  • 엔지니어와 과학자를위한 효과적인 포트란 77
  • 자바 스크립트 개발
  • C에 모두
  • 간단히 말해서 자바 예제
  • 반 숫자 알고리즘
  • 역학 소개

가장 오래된 것은 1977 년 George Elmer Forsythe, Michael A. Malcolm, Cleve B. Moler (Prentice-Hall)의 수학적 계산위한 컴퓨터 방법입니다 . Google은 책에서 텍스트가 사용 된 위치를 보여주지 않으므로 확인할 수 없습니다.

텍스트를 가장 빨리 보여주는 것은 Pascal의 Numerical Recipes (First Edition) : Press by Teukolsky, Vetterling 및 Flannery 의 과학 기술의 기술 1 , "휴대용 난수 생성기 상수"의 전체 페이지 표에 있습니다. 이 특정 숫자는 2 ^ 31에 오버플로로 제공됩니다.

수치 조리법 책의 시리즈는 큰 인기이며, 1986 년부터 인쇄에 있었다.


1
와우, 대답이 여기에 없다면 나는 그것이 어디에 있는지 모릅니다. // 감사합니다. //이 숫자가 왜 특별한 지에 대한 특정 연구를 지적 할 수 있었으면 좋았지 만 이것으로 충분합니다. 9301은 두 개의 소수 (71x131)의 산물이며, 49297은 소수입니다. 본능적으로 나는 그것이 관련성이 있다고 생각합니다. 233280은 소수가 아닙니다. 2x2x2x2x2x2x3x3x3x3x3x3x5 (또는 2 ^ 6 * 3 ^ 5 * 5)
jlarson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.