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으로 나눠 준다.
728x90
반응형
LIST
'javaScript > JS Tutorial' 카테고리의 다른 글
[javaScript] Infinity(무한)상세 설명 체크 방법은? (0) | 2022.10.03 |
---|---|
[javaScript]NaN (0) | 2022.10.01 |
[javaScript]Number (0) | 2022.09.29 |
[자바스크립트]number 지수 표기 123e5 (0) | 2022.09.28 |
[자바스크립트]endsWith() 끝나는 문자열 확인하기 (0) | 2022.09.27 |
댓글