View

더보기

강의 수강 중 잘못된 부분이 있는 듯 해서 

확인하다가 정리 해 본다😲

잘못되었던 예

 

const randomInt = (min, max)=> Math.trunc(Math.random() * (max - min) + 1 ) + min;

최소값이 포함되지 않은 정수가 출력된다.

 

더보기

randomInt(1, 6);

Math.random()은 0에서 1미만(1 포함 안됨)의 부동소숫점을 반환한다.

따라서,

(0....1) * (6-1) + 1

0.1 * 5 = 0.5, + 1 = 1.5, + 1 = 2.5

0.2 * 5 = 1.0, + 1 = 2.0, + 1 = 3.0

0.3 * 5 = 1.5, + 1 = 2.5, + 1 = 3.5

0.4 * 5 = 2.0, + 1 = 3.0, + 1 = 4.0

0.5 * 5 = 2.5, + 1 = 3.5, + 1 = 4.5

0.6 * 5 = 3.0, + 1 = 4.0, + 1 = 5.0

0.7 * 5 = 3.5, + 1 = 4.5, + 1 = 5.5

0.8 * 5 = 4.0, + 1 = 5.0, + 1 = 6.0

0.9 * 5 = 4.5, + 1 = 5.5, + 1 = 6.5


Math.trunc()는 주어진 값의 소수 부분을 제거하고 숫자의 정수부분만을 반환하므로

2,3,4,5,6 만이 반환된다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc

 

const randomInt = (min, max) => Math.trunc(Math.random() * (max - min + 1)) + min;

최소값이 포함된 정수가 출력된다.

 


MDN에 따른 랜덤 정수 뽑기

✅ 두 값 사이의 정수인 난수 생성

(최소값을 포함하지만 최대값은 포함하지 않음)

function getRandomInt(min, max) {
	min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max-min)) + min; // 최대값은 제외, 최소값은 포함
}

✅ 두 값 사이의 정수인 난수 생성

(최소값과 최대값을 모두 포함)

function getRandomIntInclusive(min, max) {
	min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min; // 최소갑과 최대값 모두 포함
}

Math.floor가 아닌 Math.round()를 사용할 수 있으나,

Math.round()를 사용하면 난수가 균일하게 분포되지 않는다.

 

참고사이트

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/random


💁‍♀️ 정리가 잘 되어있는 velog를 발견해서 참고로 링크해둡니다! (감사합니다)
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


그렇다면,

위의 randomInt와 getRandomIntInclusive 는

Math.trunc()와 Math.floor()를 사용하고 있는데 어떤 차이가 있을까?

 

Math.trunc()는 주어진 값의 소수부분을 제거하고 숫자의 정수부분을 반환한다.

즉, 단순하게 주어진 값이 양수이든 음수이든 상관없이 소수점 이하부분을 제거한다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc

 

Math .floor()는 주어진 값과 같거나 작은 정수 중에서 가장 큰 수를 반환한다.

(주어진 수보다 작은 정수를 반환한다 👉 내림)

console.log(Math.floor(5.95)); // 5
console.log(Math.floor(5.05)); // 5
console.log(Math.floor(5)); // 5
console.log(Math.floor(-5.05)); // -6

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

 

👇

따라서, 랜덤 정수 생성 시의 Math.trunc()와 Math.floor()의 사용은

음수를 사용하는 경우에만 차이가 있을 것으로 생각된다.

 


(참고)

Math.round() 반올림

Math.ceil() 올림

Math.floor() 내림

Math.abs() 절대값, 주어진 값이 양수 혹은 0인 경우에는 값을 그대로 return, 음수라면 양수를 return

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/round

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/abs

Share Link
reply
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28