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. PHP: 특정 아이피만 접근 허용

    Date2017.03.01 ByYoungho Views126
    Read More
  2. jQuery: 사용자의 스크롤 값을 구하고 싶을 땐?

    Date2017.02.13 ByYoungho Views107
    Read More
  3. Math.random()을 이용하여 일정 범위의 난수 표현하기

    Date2017.01.30 ByYoungho Views145
    Read More
  4. JavaScript: 비만도와 적정 체중

    Date2016.11.28 ByYoungho Views187
    Read More
  5. [link]JavaScript: Scope 이해

    Date2016.11.14 ByYoungho Views49
    Read More
  6. 구글 Noto 한국어 글꼴을 웹에서 마음껏! (구글 원문 펌)

    Date2016.10.12 ByYoungho Views71
    Read More
  7. !DOCTYPE html은 무엇인가?

    Date2016.09.20 ByYoungho Views84
    Read More
  8. meta 태그가 제대로 먹히지 않아 섬네일이 뜨지 않는 현상

    Date2016.08.14 ByYoungho Views85
    Read More
Board Pagination Prev 1 Next
/ 1
foot_logo
서버에 요청 중입니다. 잠시만 기다려 주십시오...