0.1 + 0.2 는 0.3이 아니다?!
// 0.1 + 0.2 는 ?
console.log(0.1 + 0.2); // 0.30000000000000004 출력
2진법과 10진법
- 사람은 0~9라는 10가지의 숫자를 이용해서 수를 나타내는 10진법 사용
- 컴퓨터는 0과 1이라는 두 개의 숫자만을 사용하여 수를 나타내는 2진법 사용
Javascript Number 64비트 부동소수점
- 자바스크립트에서 숫자는 '64 비트 IEEE 754 형식'으로 다뤄짐(64비트 중 52비트는 숫자를 저장하는 데 사용되고, 11비트는 소수점 위치를(정수는 0), 1비트는 양수/음수 부호를 저장하는 데 사용)
- 10진법으로 표현된 수를 2진법으로 변환 시 64비트를 초과하는 무한소수가 발생할수도 있는데, 64비트 공간에 맞도록 유한하게 근사치로 표현하려다 보니 미세한 값들이 초과하거나 손실
- Javascript 를 사용하여 수를 연산하는 경우 '64비트 부동소수점'을 고려하여 올바르게 연산할 수 있는 외부 라이브러리를 사용 ('BigNumber.js', 'Big.js', 'Decimal.js')
참고 사이트
'Programming Languages > JavaScript' 카테고리의 다른 글
[JavaScript] TDZ(Temporal Dead Zone) (0) | 2024.08.10 |
---|---|
[JavaScript] 호이스팅 (Hoisting) (0) | 2024.08.10 |
[JavaScript] 연산자 (0) | 2022.06.30 |
[JavaScript] 변수 (0) | 2022.06.28 |
JavaScript 란? (0) | 2022.06.28 |
댓글