JavaScript의 시뮬레이션 무작위성 이해 : Math.random ()
에 대한 깊은 다이빙 프로그래밍에서 겉보기에 쉽게 무작위로 생성되는 무작위 숫자는 종종 컴퓨터의 본질적으로 결정적인 특성을 고려할 때 종종 근본적인 복잡성을 숨 깁니다. 이 기사는 JavaScript가 math.random ()
를 사용하여 임의성을 시뮬레이션하는 방법을 살펴보고, 우리가 임의의 숫자로 인식하는 것을 생성하는 역학을 공개합니다.
컴퓨터는 핵심에서 순차적으로 지침을 실행합니다. 그래서 그들은 어떻게 무작위로 보이는 숫자를 생산합니까?
math.random ()
가 제공하는 "무작위성"은 진정으로 무작위가 아닙니다. 의사 랜덤입니다. 의사-랜덤 번호 생성기 (PRNG)는 수학 알고리즘을 사용하여 무작위와 같은 동작을 나타내는 숫자 시퀀스를 만듭니다.
prngs의 주요 특성 :
JavaScript의 math.random ()
는 일반적으로 Xorshift 또는 Mersenne Twister와 같은 알고리즘을 사용합니다 (정확한 알고리즘은 Chrome의 V8과 같은 JavaScript 엔진에 따라 다릅니다).
math.random () 는 JavaScript의 기본 랜덤 번호 생성기입니다.
예는 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 () 의 결정적 알고리즘은 시드와 알고리즘이 알려진 경우 시퀀스가 재현 가능하다는 것을 의미합니다. 암호화와 같은 보안에 민감한 작업의 경우 Cryptographically 보안 랜덤 숫자가 필수적이며 Web Crypto API를 사용하여 생성됩니다 :
// Cryptographically secure random values
const array = new Uint32Array(5);
window.crypto.getRandomValues(array);
console.log(array);
결정 론적 시스템에서 무작위성의 도전
math.random () 는 많은 응용 분야에서 실용적이지만 그 한계와 결정 론적 특성을 인정해야합니다. 보안 및 진정한 무작위성의 경우 암호화 방법이 필요합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3