본문 바로가기
TIP&TECH

엑셀 계산시 소수점 차이가 발생하는 이유 - 부동소수점 오차

by 마케터 킴 2023. 12. 14.
반응형

질문

 

Q) 엑셀 계산값에 아래와 같이 소수점 차이가 계속 발생하는데
어떤 이유로 소수점에서 차이가 생기는 건가요ㅠ?

A1  : 150.00000000000000
B1  : 140.00000000000000
A1-B1   :10.000001000

왜 이런현상이 발생하는지 알고싶습니다.!!

* 참고로 A1과 B1셀은 세줄 이상의 복잡한 수식에서 추출된 값을 값 복사로 끌고온 상태입니다!

 

 

 

부동소수점 오차

 

Excel에서 이러한 소수점 차이가 발생하는 것은 주로 부동 소수점 연산의 특성과 관련이 있습니다. 

 

부동 소수점 연산은 컴퓨터에서 실수를 근사적으로 표현하고 계산하는 방법입니다. 

이 과정에서 다음과 같은 요인들이 소수점에서의 미세한 차이를 일으킬 수 있습니다:

 

1. 부동 소수점 오차

 

- 컴퓨터는 2진수를 사용하여 실수를 표현합니다. 일부 실수는 2진수로 정확하게 표현될 수 없어 근사치로 처리됩니다. 예를 들어, 10진수의 0.1은 2진수에서 완벽하게 표현되지 않아 근사값으로 처리됩니다. 이로 인해 계산 결과에 작은 오차가 발생할 수 있습니다.

- 10진수의 0.1을 2진수로 표현하는 것이 어려운 이유는 10진수와 2진수 간의 기본적인 차이 때문입니다.

- 일부 숫자는 한 진법에서는 간단하게 표현될 수 있지만, 다른 진법에서는 정확하게 표현할 수 없습니다.
- 10진수 0.1은 2진수로 완벽하게 표현할 수 없습니다.

- 2진수에서 분수를 표현하기 위해서는 2의 거듭제곱 분수(1/2, 1/4, 1/8, 1/16, ...)를 사용합니다.

- 0.1(10진수)을 2진수로 변환하려면 무한한 길이의 반복되는 분수를 사용해야 합니다.

 

참고 : 2진수 0.1 표현법

- 2진수에서 0.1을 표현하려면 다음과 같은 과정을 거쳐야 합니다:

- 0.1(10진수)은 2진수로 0.0001100110011001100110011... 과 같이 무한히 반복됩니다.

- 이 수는 1/16 + 1/32 + 1/256 + 1/512 + ... 와 같이 계속해서 작은 분수들을 더해야 합니다.

- 이는 1/3이 10진수에서 0.3333333... 으로 무한히 반복되는 것과 유사합니다. 정확한 값을 표현하기 위해 무한한 수의 자릿수가 필요하기 때문에 컴퓨터는 이를 근사값으로 처리하게 됩니다. 이러한 근사치 표현은 계산 과정에서 미세한 오차를 발생시킬 수 있습니다.

 

2. 복잡한 수식의 중간 결과

 

복잡한 수식을 계산할 때, 중간 단계의 결과들도 부동 소수점 오차를 포함할 수 있습니다. 이러한 오차들이 최종 결과에 누적되어 더 큰 차이를 만들 수 있습니다.

 

 

3. 값 복사시 오차 포함

 

A1과 B1의 값을 다른 셀에서 값 복사로 가져온 경우, 원본 셀의 계산 결과에 이미 부동소수점 오차가 있었을 수 있습니다. 이 오차가 A1과 B1의 차이 계산에도 영향을 미칩니다.

 

 

해결 방법

 

중요한 계산에서는 Excel의 ROUND 함수를 사용하여 소수점 이하 특정 자리까지만 반올림하거나, 필요한 경우 정밀도를 높여 계산하는 방법이 있습니다.

 

예를 들어, =ROUND(A1-B1, 2)와 같은 식으로 사용하여 소수점 두 자리까지만 사용할 수 있습니다.

반응형