1. Number.EPSILON (ES6)
앱실론은 JavaScript에서 표현할 수 있는 가장 작은 수이다. 임의의 수와 그 수보다 큰 수 중 가장 작은 수와의 차이와 같다.
Number.EPSILON은 약 2.2204460492503130808472633361816 E-16 또는 $2^{-52}$이다.
부동소수점 (실수를 컴퓨터상에서 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를
따로 표기하는 것으로, 유호숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수로 나누어 표현한다.) 산술 연산 비교는 정확한 값을 기대하기 어렵다.
정수는 2진법으로 오차없이 저장이 가능한 반면 부동소수점을 표현하는 가장 표준인 IEEE 754 ( 전기 전자 기술자 협회에서 개발한 표준 부동소수점 방식)은 2진법으로 변환 시 무한소수가 되어 미세한 오차가 발생할 수밖에 없는 구조적 한계를 갖는다.
따라서 부동소수점의 비교는 Number.EPSILON을 사용하여 비교 기능을 갖는 함수가 필요하다.
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.1 + 0.2 == 0.3); // false!!!
function isEqual(a, b){
// Math.abs는 절댓값을 반환한다.
// 즉 a와 b의 차이가 JavaScript에서 표현할 수 있는 가장 작은 수인 Number.EPSILON보다 작으면 같은 수로 인정할 수 있다.
return Math.abs(a - b) < Number.EPSILON;
}
console.log(isEqual(0.1 + 0.2, 0.3));
2. Number.MAX_VALUE
자바스크립트에서 사용 가능한 가장 큰 숫자(1.7976931348623157e+308)를 반환한다. MAX_VALUE보다 큰 숫자는 Infinity이다.
Number.MAX_VALUE; // 1.7976931348623157e+308
var num = 10;
num.MAX_VALUE; // undefined
console.log(Infinity > Number.MAX_VALUE); // true
3. Number.MAX_VALUE ES1
자바스크립트에서 사용 가능한 가장 큰 숫자(1.7976931348623157e+308)를 반환한다. MAX_VALUE보다 큰 숫자는 Infinity이다.
Number.MAX_VALUE; // 1.7976931348623157e+308
var num = 10;
num.MAX_VALUE; // undefined
console.log(Infinity > Number.MAX_VALUE); // true
4. Number.MIN_VALUE
자바스크립트에서 사용 가능한 가장 작은 숫자(5e-324)를 반환한다. MIN_VALUE는 0에 가장 가까운 양수 값이다. MIN_VALUE보다 작은 숫자는 0으로 변환된다.
Number.MIN_VALUE; // 5e-324
var num = 10;
num.MIN_VALUE; // undefined
console.log(Number.MIN_VALUE > 0); // true
5. Number.POSITIVE_INFINITY
양의 무한대 Infinity를 반환한다.
Number.POSITIVE_INFINITY // Infinity
var num = 10;
num.POSITIVE_INFINITY; // undefined
6. Number.NEGATIVE_INFINITY
음의 무한대 -Infinity를 반환한다.
Number.NEGATIVE_INFINITY // -Infinity
var num = 10;
num.NEGATIVE_INFINITY; // undefined
7. Number.NaN
숫자가 아님(Not-a-Number)을 나타내는 숫자값이다. Number.NaN 프로퍼티는 window.NaN 프로퍼티와 같다.
console.log(Number('xyz')); // NaN
console.log(1 * 'string'); // NaN
console.log(typeof NaN); // number
'JavaScript' 카테고리의 다른 글
Prototype (0) | 2021.11.28 |
---|---|
JavaScript Execution Context (0) | 2021.11.27 |
구조 분해 할당 (0) | 2021.10.23 |
JS module (0) | 2021.10.23 |
Fetch API (0) | 2021.10.17 |
댓글