sicp.io
3.1.3 · 의사 난수 상태

시드는 바뀌는 출력을 재현 가능하게 만든다.

생성기는 비공개 시드 하나를 호출마다 바꾸면서도 같은 시작값에서는 같은 수열을 다시 만들 수 있습니다.

생각해 볼 질문

상태가 매번 바뀌는 생성기가 어떻게 정확히 같은 수열을 반복할 수 있을까요?

  • 현재 시드를 하나의 비공개 변경 가능 위치로 다루기
  • 생성된 한 값에서 다음 값으로 이어지는 점화식 따라가기
  • 결정론적 의사 난수와 외부 난수 구분하기
  • 같은 시드로 생성기를 구성해 수열 재현하기

make-rand는 seed를 둘러쌉니다. 각 호출은 현재 값에 48271을 곱하고 2147483647로 나눈 나머지를 구한 다음, 그 결과를 seed에 다시 저장하고 반환합니다. 따라서 다음 호출은 이전 호출이 생성한 값에서 시작합니다.

점화식은 결정론적입니다. 따로 구성된 두 생성기는 각자의 비공개 위치에서 시작하지만, 시작 시드가 같으면 값 수열도 같아집니다. 이 수업의 생성기는 상태와 재현 가능성을 직접 관찰할 수 있게 만듭니다.

SICP 코드UTF-8 192 / 1,048,576바이트
예제
결과
출력
진단
실행 추적0 / 0 개 이벤트
    실행은 브라우저 안에서 이루어지며 프로그램 결과와 실행 추적을 보여줍니다.
    예상 결과

    첫 번째 프로그램은 (48271 182605794 1291394886 1914720637 2078669041)을 반환합니다. 두 번째 프로그램은 (337897 1278240558 337897 1278240558)을 반환합니다.

    실행 추적에서 볼 점

    캡처된 seed의 각 set!을 찾고 저장된 결과가 다음 호출로 이어지는 과정을 따라가세요. 두 번째 프로그램에서는 첫 번째와 두 번째 값이 일치하더라도 두 클로저 환경을 서로 분리하여 살펴보세요.

    직접 해보기

    프로그램을 수정하고 결과를 비교해 보세요.

    right 생성기의 시드만 7에서 8로 변경하세요. 프로그램을 실행하기 전에 어느 위치가 여전히 일치할 수 있는지 예측해 보세요.

    힌트 보기

    두 생성기는 서로 독립된 위치를 가집니다. 동일한 점화식은 시작 시드가 같을 때만 수열을 재현합니다.

    이 수업 완료하기

    이 장의 총 21개 수업 중 0개 완료0%