Thief of Wealth

자바스크립트는 왜 부동소수점의 정확성이 떨어질까?

0.1 + 0.2 === 0.3 // false

왜?

자바스크립트 숫자는 항상 64bit 이다.

자바스크립트는 정수/짧은/긴/부동소수점 등의 다른 유형을 정의하지 않는다.

C는 short, int, float, double 등 다양하지만 자바스크립트는 무조건 number이다. (BigInteger도 있당)

그리고 이건든 국제 표준인 IEEE 754에 따라서 계산되고 정의되어지는데,

이것은 64bit일때 15자리의 정확도까지 보장한다.

10진수 값을 bit로 저장하려고 2진수로 바꾸게되는데 0.1, 0.2같은 부동 소수점은 무한 소수가 발생하고 이는 반올림을 통해 근사값이 저장되게 된다. 계산

이를 해결하기 위해서는 수학관련 라이브러리 혹은 정수로 바꿔서 계산하는 방식이 있다!

profile on loading

Loading...