본문 바로가기
프로그래밍/Java Script

Java Script - 64bit 부동 소수점

by 3.14pie 2022. 12. 5.

Java Script에서 소수점 계산 시 오류가 발생할 수 있다.

        let x = 0.1 + 0.2;

        console.log(x);

당연히 x는 0.3으로 결과가 출력될 것 같지만 실제로는 0.30000000000000004가 출력된다.

이는 10진법에서 2진법으로 바꿔 계산하는 과정에서 발생하는 것으로 무한소수와 유한소수의 차이점에서 나타난다.

무한소수는 말그대로 소수가 끝나지 않는 것으로 64비트를 사용하는 Java Script에서는 숫자가 넘치게 된다.

        console.log((0.1).toString(10));
        console.log((0.1).toString(2));

0.1

0.0001100110011001100110011001100110011001100110011001101

 

이러한 차이점이다. 그래서 반올림처럼 근사값으로 값을 나타내준다.

처음으로 돌아가 x 값이 0.30000000000000004 되는 것이다.

 

하지만 64비트 모두 숫자가 저장되는 것은 아니다.

첫 비트는 음수와 양수를 표시하는 비트이고, 11비트는 지수부, 52비트는 가수부를 표현하는 비트이다.

따라서 실제 표현할 수 있는 값은 64비트의 최대치보다 작다.

 

이런 문제를 해결하기 위해서는 외부 라이브러리를 사용할 수 있다.

BigNumber.js, Big.js, Decimal.js