AI가 0.1 더하기 0.2를 0.3과 다르다고 판정해도 될까?
이진 부동소수점에서 단순한 십진 소수도 근삿값입니다. 두 수·목표·허용오차를 바꿔 완전 일치와 목적에 맞는 비교를 구분합니다.
그림에서 무엇을 볼까요?
0.1과 0.2의 이진 부동소수점 합이 0.30000000000000004가 되어 완전 일치는 실패하지만 작은 허용오차 안에서는 같게 처리되는 비교 그림입니다.
십진수 0.1은 유한한 이진 분수로 정확히 끝나지 않습니다. 컴퓨터는 가장 가까운 표현 가능한 값으로 저장합니다.
그래서 0.1+0.2를 충분히 많은 자리로 표시하면 0.30000000000000004가 될 수 있습니다. 계산 규칙의 버그라기보다 표현 방식의 결과입니다.
함께 확인할 점
계산값은 JavaScript Number의 IEEE 754 배정밀도 이진 부동소수점입니다. 같게 처리 조건은 |합−목표|≤허용오차입니다. 허용오차 자체는 업무 목적에 따라 정해야 합니다.
생각해 볼 질문
자신의 계산에서 완전 일치가 필요한 값과 허용오차 비교가 필요한 값을 하나씩 적고 이유를 설명해 보세요.
