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