부동소수점
❓질문
자바스크립트에서 "0.1 + 0.2 === 0.3"의 실행 결과에 대해 설명해주세요.
💡 조사하기전 내가 알고 있던 내용
보통 자바스크립트의 부동소수점을 설명할땐 0.1 + 0.2 === 0.3 의 값은 false라고 예를듭니다
이는 0.1와 0.2를 더한값이 0.3이라고 생각하여 true라고 생각할 수 있지만 이는 자바스크립트의 숫자를 보관하는 방식때문에 false가 나오게됩니다.
이는 숫자를 64비트로 보관하게되는데 특정 소수를 64비트로 표현하면 무한 반복되는점이 있습니다 이는 자바스크립트에서 무한 반복되게 가다가 근사값으로 표현하게되는데 0.1과 0.2를 더하게되면 0.3이 아닌 0.3000000~ 이 되게됩니다 그렇기 때문에 false가 나오게됩니다.
그렇다면 어떻게 해야할까?
function isEqual(a, b) {
return Math.abs(a - b) < Number.EPSILON;
}
console.log(isEqual(0.1 + 0.2, 0.3)) // true;
Number에 EPSILON은 자바스크립트에서 가질 수 있는 가장 작은 수다 이를 이용해서 처리할 수 있다고 본거같다.