“ 매주 목요일마다 당신이 항상 하던대로 신발끈을 묶으면 신발이 폭발한다고 생각해보라.
컴퓨터를 사용할 때는 이런 일이 항상 일어나는데도 아무도 불평할 생각을 안 한다. ”- Jef Raskin
맥의 아버지 - 애플컴퓨터의 매킨토시 프로젝트를 주도
반응형
컴퓨터가 항상 원하는 결과를 주는 것은 아니다.
소수점 연산 해결해 보자!
프로그래밍을 하다 보면 의외의 계산 결과가 나오는 경우가 있습니다. 예를 들어, 0.1 + 0.2가 0.3이 아닌 0.30000000000000004로 출력될 때가 있죠. 이러한 현상은 컴퓨터가 소수를 표현하는 방식인 ‘부동 소수점’ 때문입니다. 이 글에서는 부동 소수점 오류의 원리와 실무에서 이를 해결하는 방법을 알아보겠습니다.
목차
부동 소수점 연산
부동 소수점의 원리
컴퓨터는 소수를 2진수로 변환해 메모리에 저장합니다. 그러나 일부 소수는 2진수로 완벽히 표현되지 않아 미세한 오차가 발생합니다. 0.1과 0.2는 2진수로 정확히 표현할 수 없어 계산 시 미세한 오류가 생깁니다.
예제와 해결법 예를 들어, Python에서 0.1 + 0.2를 계산하면 다음과 같은 결과가 나옵니다.
a = 0.1 + 0.2
print(a) # 출력: 0.30000000000000004
이러한 오류를 피하기 위해 Decimal 모듈을 사용해 정확한 소수 계산을 할 수 있습니다.
from decimal import Decimal
a = Decimal('0.1') + Decimal('0.2')
print(a) # 출력: 0.3
실무에서의 주의점
실무에선 정확한 계산이 필수적이므로, Decimal이나 고정 소수점 방식이 더 안전합니다. 이를 통해 예상치 못한 오차를 줄이고, 결과의 신뢰성을 높일 수 있습니다.
마무리
부동 소수점 연산 오류는 컴퓨터 연산의 한계로 생기는 필연적 문제입니다. 그러나 이를 이해하고 적절한 해결책을 사용하면 실무에서 문제를 예방할 수 있습니다. 코드의 정확성을 위해 다양한 연산 방식을 활용하는 것이 중요합니다.