진정 난수의 정의는 무엇인가요?
진정한 난수는 일반적으로 배열에 상대적입니다. 진정한 난수는 규칙이 없는 숫자입니다. 다음 값이 무엇인지 예측할 수 없습니다. 이 현상으로 얻은 진정한 무작위 배열은 공개되지만, 배열을 얻은 사람은 누구나 다음 숫자가 무엇인지 알 수 있기 때문에 더 이상 진정한 무작위 배열이 아닙니다.
과거에는 컴퓨터가 진정한 난수를 생성할 수 없다는 점을 모두가 공통적으로 알고 있었습니다. 사실 이는 컴퓨터가 난수를 생성하는 방법에 대한 이해가 부족했기 때문입니다. 한 가지 예:
가장 일반적으로 사용되는 C 언어의 일부 함수의 특징은 호출될 때마다 실행 시간이 다르다는 것입니다. 즉, 실행 시간은 어느 정도 무작위성을 가질 수 있습니다. 이 기능을 사용하여 필요한 난수를 얻으세요. 이러한 함수에는 Beep(0, 0), SetWindowText(NULL), MessageBeep(MB_ICONQUESTION) 등이 포함됩니다. 다른 언어의 함수도 비슷한 상황이 있음은 확실합니다.
목표를 달성하려면 이러한 함수를 지속적으로 호출하고, 실행 시간을 모니터링하고, 실행 시간을 처리하면 됩니다. 하지만 함수의 실행 시간이 매우 짧고, 시간을 측정하는 일반적인 방법이 너무 거칠기 때문에 자체적으로 측정 방법을 설계해야 합니다. 각 컴퓨터에는 클럭 주기에 해당하는 자체 작동 주파수가 있습니다. 컴퓨터가 실행 중인 이후의 클럭 주기를 읽는 함수를 만들고, 해당 함수가 실행될 때 컴퓨터가 경험한 주기 수를 사용하여 시간을 측정합니다. ; 이를 측정합니다. 현재 사이클 번호에서 함수를 실행한 다음, 두 사이클 번호의 차이에서 배경 값을 뺀 값이 함수 실행 시간을 나타냅니다. 실행 시간이 길면 런타임 배열을 처리하여 무작위 배열을 얻습니다.
실험 데이터를 살펴보겠습니다.
Beep(0, 0) 함수의 실행 시간은 115636, 114283, 114899, 115030, 114488, 114350, 114866, 115132, 114317, 114757
p>워드 배열에 배치하면 50100, 48747, 49363, 49494, 48952, 48814, 49330, 49596, 48781, 49221이 됩니다.
바이트 배열에는 180, 107, 211, 86, 56, 174, 178, 188, 141, 69가 있습니다.
분명히 16비트 워드 배열에 넣는 효과는 좋지 않습니다. 이는 함수 실행 시간이 최대값인 16비트보다 단지 0.7배 더 길기 때문입니다. 하지만 8비트 배열에 넣는 것은 잘 작동하며 다른 숫자의 데이터도 여기에서 결합할 수 있습니다.
많은 양의 데이터 생성 감지를 통해주기적인 현상이 발견되지 않았습니다. 즉, 배열 길이가 클 경우 모든 요소가 동일한 확률과 좋은 무작위성을 나타내므로 반복되지 않습니다. 진정한 난수.
다음은 지속적으로 큰 난수를 생성하는 프로그램입니다: /s/1Dphz