# Number

js에서는 정수 값과 실수 값의 타입을 구분하지않는다.

그래서 js는 모든 숫자를 실수로 표현하고 IEEE 754 표준에서 정의한 64비트 실수 형태로 표현한다.

+-2의 53승 사이의 정수 값을 정확하게 표현할 수 있다.

(하지만 배열 인덱싱이나 비트 연산은 32비트 정수로 수행한다고 한다.)

# 부동소수점

부동소수점 리터럴은 실수를 표현하는 전통적인 문법을 따른다.

실수는 정수 부분과 소수점, 소수점 이하 부분으로 표현한다.

자바스크립트에서 실수 연산을 할 때는 근사 값으로 표현한다.

위에서 언급한 IEEE-754 부동소수점 표현방식은 1/2, 1/8, 1/1024 같은 분수를 정확하게 표현할 수 있는 이진 표현법(binary representation)이다.

이 표현 방식은 고정소수점에 비해 더 넓은 범위의 숫자를 표현할 수 있다는 큰 장점이 있다.

고정소수점은 본래 10자리를 표현할 수 있던 자료형의 5자리를 떼어 소수부에 나눠준다면

그 자료형이 표현할 수 있는 수의 범위는 정수부 기준 다섯자리밖에 안된다는 뜻이다.

예를 들면 0.003 과 같은 값을 3x10^-3 과 같은 방법으로 표기한다.

하지만 컴퓨터는 10 제곱은 사용할 수 없고, 이진법을 사용하므로 가장 많이 사용하는 1/10(0.1)과 같은 간단한 값인 10진 분수는 정확하게 표현할 수 없다. (2제곱의 분수만 정확하게 표현한다.)

따라서 정확하게 표현할 수 없는 숫자인 이 녀석들은 0.1 + 0.2 === 0.3 // false 과 같은 결과를 볼 수 있다.


ref: js완벽가이드 책, 삼성sw멤버쉽블로그