본문 바로가기
프로그래밍 언어/Javascript

자바스크립트 Numbers

by pagehit 2021. 7. 5.
반응형

자바스크립트의 숫자는 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

 

 

반응형

댓글