jooyoungho-Logo

Lab

자바스크립트에서 원하는 범위의 난수(의사난수)를 얻으려면 어떻게 해야 할까?

Math 개체의 random()과 floor() 메서드를 이용하면 쉽게 구현할 수 있다.

긴 설명은 생략하고, 모질라 재단에서 적어준 랜덤 메서드의 활용 소스를 보자.

 

// min (포함) 과 max (불포함) 사이의 임의 정수를 반환
// Math.round() 를 사용하면 고르지 않은 분포를 얻게된다!
function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min)) + min;
}
// min (포함) 과 max (포함) 사이의 임의 정수를 반환
// Math.round() 를 사용하면 고르지 않은 분포를 얻게된다!
function getRandomIntInclusive(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

 

Math.random()은 0부터 1까지의 난수(의사난수)를 생성해주고 Math.floor()는 버림을 한다.

위 코드에서 중요한 부분은 Math.floor(Math.random() * (max - min + 1)) + min; 인데,

만약 15부터 64까지의 난수(의사난수)를 표현하고 싶다면 Math.floor(Math.random() * (64 - 15 + 1)) + 15; 를 하면된다.

 

차근차근 생각해보면,

위에서 말한 것처럼 Math.random()은 0~1의 범위를 생성한다.

여기에 50을 곱하면 0 ~ 50까지의 난수(의사난수)가 나오는 것이고, 또 15를 더하면 결국 15 ~ 65 범위의 난수(의사난수)가 나오는 것이다.

 

잠깐, 처음에 내가 지정한 범위는 64까지인데 왜 65가 포함된 것인가? 라고 물을 수도 있다.

우리들은 마지막에 Math.floor를 통해 소수점 자리를 버린다.

즉, 65가 나오려면 정확한 자연수 65가 나와야 한다.

왜냐하면 15 ~ 65까지의 범위에서 15.xxxxxx는 나올 수 있지만 65.xxxxxx는 나올 일이 없기 때문이다.

소수점 자리를 버림으로써 15.xxxxxx는 15가 되겠지만, 65는 그냥 65다. 만약 위 예제에서 65가 나오면 로또를 사도록 하자.

 


  1. 등록된 글이 없습니다.
Board Pagination Prev 1 Next
/ 1
foot_logo
서버에 요청 중입니다. 잠시만 기다려 주십시오...