[Replit-Js-exercise] 22. Math.random & mix/max 범위

eunkyung·2022년 12월 25일
0

✅ Math.random 메소드

Math.random()// 0 ≤ x < 1 

Math.random()은 0.000000 ~ 0.999999 중 임의 숫자(난수)를 반환한다.

✅ 자주 사용하는 수학 관련 메소드

Math.floor() // 내림버림
Math.ceil() // 오름버림
Math.round() // 반올림

✅ 최솟값&최댓값 지정 범위 내 랜덤 숫자

1. 최댓값을 포용하지 않는 범위 (min ≤ x < max)

function Num (min, max) {
  return Math.floor(Math.random * (max-min)) + min }
  • floor은 내림버림으로 0 ~ (N-1)
    ex) max = 7 , Math.random = 7 x 0.99999999 = 6.999999, Math.floor(Math.random) = 6

  • ceil은 올림버림으로 1 ~ N

2. 최댓값을 포용하는 범위 (min ≤ x ≤ max)

function Num (min, max) {
  return Math.floor(Math.random * (max+1-min)) + min }

3. 해당 메소드를 이해해 보자.

1) 최댓값(max) 범위 만들어주기 (Ex: 0 ≤ x < 10)

     Math.random() * 10 

2) 최솟값(min) 범위 만들어주기 (Ex: 2 ≤ x < 10)

     (Math.random() * 10) + 2

이렇게 되면 최솟값(2)은 만족되지만, 최댓값이 9.99999+2 = 11.9999가 되어 틀어짐. (최댓값 붕괴)


3) 최솟값(2)를 더해도 9.9999로 유지하려면 최솟값을 미리 빼주면 되겠다. >> 최솟값 붕괴

     (Math.random() * 10 - 2) + 2

3-1) 최댓값 :

Math.random() * 10의 최대값 9.999999999999999 - 2 = 7.999999999999999
7.999999999999999 + 2 = 9.999999999999999

3-2) 최솟값 :

Math.random() * 10의 최소값 0.0000000000000000 - 2 = -2
-2 + 2 = 0 (2가 아니라 다시 0으로 됨.. 최솟값 틀어짐)


4) 결론 : 최솟값(2)를 더해도 9.9999로 유지하려면 최댓값에 미리 최솟값을 빼주면 되겠다 !

     Math.random() * (10 - 2) + 2

3-1) 최댓값 :
Math.random() * 10의 최대값 9.999999999999999 - 2 = 7.999999999999999
7.999999999999999 + 2 = 9.999999999999999

3-2) 최솟값 :
Math.random() * 10의 최소값 0.0000000000000000 + 2 = 2.0000000000

✅ 정 리

1) Math.random * (max - min) : 0 ≤ x < (max - min)
2) + min : min ≤ x < (max - min) + min
3) ∴ min ≤ x < max


1) Math.random * (max + 1 - min) : 0 ≤ x < (max + 1 - min)
2) + min : min ≤ x < (max + 1 - min) + min
3) min ≤ x < max + 1
4) ∴ min ≤ x ≤ max


ex) min = 3, max = 7,
3 ≤ Math.floor(Math.random = 3 ~ 6.999999) < 7

3 ≤ Math.random = Math.floor(3 ~ (6.999999 + 1 = 7.999999)) ≤ 7


참고 :
https://kangdanne.tistory.com/105

https://velog.io/@mementomori/Javascript-%EC%B5%9C%EC%86%8C-%EC%B5%9C%EB%8C%80%EA%B0%92-%EC%82%AC%EC%9D%B4%EC%9D%98-%EB%9E%9C%EB%8D%A4-%EC%88%AB%EC%9E%90-%EB%BD%91%EA%B8%B0

https://velog.io/@hope9405/%EC%99%9C-%EB%9E%9C%EB%8D%A4-%EC%A0%95%EC%88%98%EB%A5%BC-%EB%A7%8C%EB%93%A4%EB%95%8C-Math.floor%EB%A5%BC-%EC%93%B8%EA%B9%8C

0개의 댓글