Math.random()// 0 ≤ x < 1
Math.random()은 0.000000 ~ 0.999999 중 임의 숫자(난수)를 반환한다.
Math.floor() // 내림버림
Math.ceil() // 오름버림
Math.round() // 반올림
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
function Num (min, max) {
return Math.floor(Math.random * (max+1-min)) + min }
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으로 됨.. 최솟값 틀어짐)
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