
자바스크립트는 숫자를 표현하기 위해 IEEE 754 표준을 따르는 64비트 부동 소수점 숫자 형식을 사용한다. 이 형식은 매우 큰 숫자와 매우 작은 숫자를 표현할 수 있지만, 모든 숫자가 정확하게 표현되는 것은 아니다. 특히, 정수 연산에서 정확성을 보장하기 위해 안전한 범위가 정의되어 있다. 이 범위는 Number.MIN_SAFE_INTEGER와 Number.MAX_SAFE_INTEGER 상수로 나타낸다.
MAX_SAFE_INTEGERNumber.MAX_SAFE_INTEGER는 자바스크립트에서 안전하게 표현할 수 있는 가장 큰 정수다. 이 값은 2^53 - 1로, 숫자로는 9,007,199,254,740,991이다. 이 값보다 큰 정수는 부동 소수점 표현의 한계로 인해 정확성이 보장되지 않는다.
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
MIN_SAFE_INTEGERNumber.MIN_SAFE_INTEGER는 자바스크립트에서 안전하게 표현할 수 있는 가장 작은 정수다. 이 값은 -(2^53 - 1)로, 숫자로는 -9,007,199,254,740,991이다. 이 값보다 작은 정수도 부동 소수점 표현의 한계로 인해 정확성이 보장되지 않는다.
console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991
안전한 정수란, 부동 소수점 산술을 사용하여 정확하게 표현할 수 있는 정수를 의미한다. 다시 말해, 안전한 정수는 어떤 다른 정수와도 혼동되지 않는 정확한 값이다. 예를 들어, Number.MAX_SAFE_INTEGER + 1과 Number.MAX_SAFE_INTEGER + 2는 부동 소수점 표현의 한계로 인해 같은 값을 가질 수 있다. 따라서 이 범위를 벗어난 정수 연산은 신뢰할 수 없다.
console.log(Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2); // true
자바스크립트는 숫자가 안전한 정수인지 확인할 수 있는 방법을 제공한다. Number.isSafeInteger() 메서드를 사용하면 숫자가 MIN_SAFE_INTEGER와 MAX_SAFE_INTEGER 사이에 있는지 확인할 수 있다.
console.log(Number.isSafeInteger(10)); // true
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER)); // true
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1)); // false
console.log(Number.isSafeInteger(1.5)); // false
알고리즘에서 최대값과 최소값을 비교할 때 MIN_SAFE_INTEGER와 MAX_SAFE_INTEGER를 유용하게 활용할 수 있다. 예를 들어, 배열에서 최대값과 최소값을 찾는 알고리즘을 작성할 때 초기값으로 사용할 수 있다.
function findMinMax(arr) {
let min = Number.MAX_SAFE_INTEGER;
let max = Number.MIN_SAFE_INTEGER;
for (let num of arr) {
if (num < min) {
min = num;
}
if (num > max) {
max = num;
}
}
return { min, max };
}
const numbers = [5, 17, 23, -5, 0, 89, -100];
const result = findMinMax(numbers);
console.log(result); // { min: -100, max: 89 }
이처럼 MIN_SAFE_INTEGER와 MAX_SAFE_INTEGER는 알고리즘에서 최대값과 최소값을 비교할 때 초기값으로 사용하여 코드를 간결하고 명확하게 작성할 수 있다.