"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 컴퓨터의 임의 숫자는 실제로 무작위입니까? JS 버전

컴퓨터의 임의 숫자는 실제로 무작위입니까? JS 버전

2025-04-13에 게시되었습니다
검색:346

JavaScript의 시뮬레이션 무작위성 이해 : Math.random ()

에 대한 깊은 다이빙

프로그래밍에서 겉보기에 쉽게 무작위로 생성되는 무작위 숫자는 종종 컴퓨터의 본질적으로 결정적인 특성을 고려할 때 종종 근본적인 복잡성을 숨 깁니다. 이 기사는 JavaScript가 math.random () 를 사용하여 임의성을 시뮬레이션하는 방법을 살펴보고, 우리가 임의의 숫자로 인식하는 것을 생성하는 역학을 공개합니다.

Is random numbers in computers are random at all? JS version

컴퓨팅에서 무작위성의 환상

컴퓨터는 핵심에서 순차적으로 지침을 실행합니다. 그래서 그들은 어떻게 무작위로 보이는 숫자를 생산합니까?

Is random numbers in computers are random at all? JS version

Pseudo-Random 번호 생성기 (PRNGS)

math.random () 가 제공하는 "무작위성"은 진정으로 무작위가 아닙니다. 의사 랜덤입니다. 의사-랜덤 번호 생성기 (PRNG)는 수학 알고리즘을 사용하여 무작위와 같은 동작을 나타내는 숫자 시퀀스를 만듭니다.

prngs의 주요 특성 :

  1. 종자 값 : 시작 값 (시드)은 숫자 시퀀스를 시작합니다. 씨앗은 전체 시퀀스를 지시합니다.
  2. 결정 론적 행동 : 알고리즘과 종자를 아는 것은 전체 숫자 시퀀스를 예측할 수 있습니다.
  3. 주기성 : prngs는 특정 수의 반복 후에 시퀀스를 필연적으로 반복합니다.

JavaScript의 math.random () 는 일반적으로 Xorshift 또는 Mersenne Twister와 같은 알고리즘을 사용합니다 (정확한 알고리즘은 Chrome의 V8과 같은 JavaScript 엔진에 따라 다릅니다).

Is random numbers in computers are random at all? JS version

decoding

math.random ()

math.random () 는 JavaScript의 기본 랜덤 번호 생성기입니다.

0 (포함)과 1 (독점) 사이에 부동 소수점 번호를 생성합니다.

예는 0.2315601941492, 0.6874206142281 또는 0.9912760919023.
가 포함됩니다.

// Random number between 0 and 1
console.log(Math.random());

// Random integer between 0 and 9
console.log(Math.floor(Math.random() * 10));

// Random number between 1 and 100
console.log(Math.floor(Math.random() * 100)   1);

math.random () 의 내부 작업.

프로세스에는 다음과 같은 단계가 포함됩니다.

    초기 종자 값이 사용됩니다. 이 씨앗은 종종 시스템 시계 또는 다른 고유 한 소스에서 파생됩니다.
  1. 알고리즘은 새 숫자를 생성하기 위해 씨앗에 수학적 변환을 적용합니다.
  2. 이 새로운 숫자는 큰 상수로 나뉩니다 (0과 1 사이의 정규화를 위해)
  3. 이 프로세스는
  4. math.random () 에 대한 모든 호출에 대해 반복되며 순서에서 다음 번호를 생성합니다.
이 예측 가능한 시퀀스 (시드가 주어진) 시뮬레이션 및 게임에 적합하지만 암호화 응용 프로그램에는 적합하지 않습니다.

왜 진정한 무작위성이 애매하게 남아 있는지

math.random () 의 결정적 알고리즘은 시드와 알고리즘이 알려진 경우 시퀀스가 ​​재현 가능하다는 것을 의미합니다. 암호화와 같은 보안에 민감한 작업의 경우 Cryptographically 보안 랜덤 숫자가 필수적이며 Web Crypto API를 사용하여 생성됩니다 :

// Cryptographically secure random values
const array = new Uint32Array(5);
window.crypto.getRandomValues(array);
console.log(array);
결정 론적 시스템에서 무작위성의 도전

Is random numbers in computers are random at all? JS version

컴퓨터의 이진 특성 (0S 및 1S)은 임의성의 고유 한 불확실성과 충돌합니다. 무작위성을 효과적으로 시뮬레이션하려면 :

  1. 외부 소스 : 시스템은 종종 예측할 수없는 외부 데이터 (마우스 움직임, 키 스트로크, 시스템 클록)를 종종 종자 값에 사용합니다.
  2. 엔트로피 풀 : 운영 체제는 엔트로피 풀을 유지하고 다양한 소스에서 소음을 수집하여 임의성을 향상시킵니다.
결론 : 필요한 환상

컴퓨터의 무작위성은 정교한 알고리즘과 초기 종자에 의존하는 신중하게 구성된 환상입니다.

math.random () 는 많은 응용 분야에서 실용적이지만 그 한계와 결정 론적 특성을 인정해야합니다. 보안 및 진정한 무작위성의 경우 암호화 방법이 필요합니다.

코드를 유도하는 결정론과 시뮬레이션 된 무작위성 사이의 흥미로운 상호 작용에 감사드립니다!

Is random numbers in computers are random at all? JS version

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3