본문 바로가기
javaScript/JS Tutorial

[javaScript] 부동소수점 연산 오류

by mooyou 2022. 9. 30.
728x90
300x250
SMALL

 

아래의 연산을 계산해 보면

let x = 0.2 + 0.1;

당연히 0.3이 나올 거라 생각되지만 결과는 예상과 다른 값이 나온다.

0.2 + 0.1 = 0.30000000000000004

 

정수에서도 오차를 발견할 수 있다.

let x = 999999999999999;   // x will be 999999999999999
let y = 9999999999999999;  // y will be 10000000000000000

정수의 최대 자릿수는 15자리까지 정확하게 표출이 된다.

 

 

왜 이런 오차가 발생하는 것일까?

컴퓨터는 소수 2진수를 이용해서 저장하고 컴퓨터의 저장용량은 한정되어있는데 무한대의 엄청 큰 숫자를 정확하게 계산하려면 속도도 느려지고 용량도 많이 차지하게 될 것이다.

그렇기 때문에 효율성을 위해서 자바스크립트는 IEEE 754국제 표준 방식을 사용하여 계산하기 때문에  반올림 오차가 존재한다.

 

 

해결방법

부동소수점 산술 문제를 해결하려면 곱셈과 나눗셈의 도움이 필요하다.

<p id="demo1"></p>
<p id="demo2"></p>

<script>
let x = 0.2 + 0.1;
document.getElementById("demo1").innerHTML = "0.2 + 0.1 = " + x;
let y = (0.2*10 + 0.1*10) / 10;
document.getElementById("demo2").innerHTML = "0.2 + 0.1 = " + y;
</script>

실행결과

0.2 + 0.1 = 0.30000000000000004

0.2 + 0.1 = 0.3

 

10을 곱해서 계산한 후 결과 값을 다시 10으로 나눠 준다.

 

 

참고:https://www.w3schools.com/js/js_numbers.asp

728x90
반응형
LIST

댓글