반응형
자바스크립트의 숫자는 64비트 부동소수점 형식(floating-point)을 따른다.
하지만 배열 인덱스나 비트 연산에서는 32비트 정수를 이용한다.
정수(integer literals)
255
/* 16진수 */
0xff
0xFF
0Xff
/*** ES6 ***/
0b11111111 // 2진수
0o377 // 8진수
실수(floating-point literals)
3.14
.333
6.02e23 // 6.02 x 10^23
3.14E-1 // 3.14 x 10^(-1)
자바스크립트는 arithmetic overflow, underflow, division by zero에 대해 에러를 발생시키지 않는다. arithmetic overflow가 발생하면 값은 Infinity가 된다. 반대로 음수쪽으로 overflow가 발생하면 -Infinity가 된다.
자바스크립트에서는 division by zero가 나타나면 infinity나 -infinity를 반환한다.
0을 0으로 나누면 NaN이 된다(not-a-number). 음수의 제곱근, infinity 나누기 infinity, 숫자가 아닌 타입에 사칙연산을 하는 경우 NaN이 반환된다.
/*** 아래는 모두 Infinity ***/
Infinity
Number.POSITIVE_INFINITY
1/0
Number.MAX_VALUE + 1
/*** 아래는 모두 -Infinity ***/
-Infinity
Number.NEGATIVE_INFINITY
-1/0
-Number.MAX_VALUE - 1
/*** NaN ***/
NaN
Number.NaN
0/0
Infinity/Infinity
아래 코드의 경우 underflow가 발생한다.
Number.MIN_VALUE/2 // 0, underflow
-Number.MIN_VALUE/2 // -0, negative zero
x === NaN을 쓸 수 없다. Nuber.isNaN(x)를 써야한다.
Infinity === -Infinity // False
0 === -0 // True
IEEE-754 floating-point는 1/2, 1/8, 1/1024와 같은 실수는 정확하게 표현할 수 있다. 1/10, 1/100 등은 정확하게 표현하지 못한다.
let x = .3 - .2;
let y = .2 - .1;
x === y // false
x === .1 // false
y === .1 // true
반응형
댓글