의사 난수 생성
자바스크립트에서 의사 난수를 생성할 때는 Math.random()을 사용합니다. 이 함수는 0 이상 1 미만의 숫자를 반환합니다. 대수학에서 x 이상 y 이하를 [x, y], x 초과 y 미만을 (x, y) 라고 표기한 것을 기억하나요? 이 표기법을 따르면 Math.random()이 반환하는 숫자는 [0, 1)이라고 쓸 수 있습니다.
Math.random()은 0 이상 1 미만의 범위에 있는 의사 난수를 생성할 뿐, 다른 범위의 의사 난수를 생성하는 간편 메서드는 없습니다. 이하 표는 다른 범위의 난수가 필요할 때 널리 쓰이는 공식입니다. 이 표에서 x와 y는 실수real number, m과 n은 정수입니다.
| 범위 | 예제 |
|---|---|
| 0 이상 1 미만 | Math.random() |
| x 이상 y 미만 | x + (y-x)*Math.random() |
| m 이상 n 미만의 정수 | x + Math.floor((n-m)*Math.random()) |
| m이상 n 이하의 정수 | x + Math.floor(n-m+1)*Math.random()) |
자바스크립트의 의사 난수 발생기는 시드seed 숫자를 쓸 수 없다는 단점이 지적되곤 합니다. 의사 난수를 사용하는 알고지름 중에는 시드 숫자가 중요할 때가 많습니다. 시드를 사용해 의사 난수를 생성해야 한다면 데이비드 바우David Baw의 seedrandom.js 패키지(https://github.com/davidbau/seedrandom)을 보십시오.
NOTE 의사 난수pseudorandom number 발생기를 난수random number 발생기라 부르는 사람이 많습니다만, 엄밀히 말하면 틀린 표현입니다. 의사 난수 발생기가 생성하는 난수는 대부분의 애플리케이션에서 랜덤하다고 말할 수 있을 정도로 무작위 하다는 의미로, 진정한 난수를 만드는 건 대단히 어려운 문제입니다.