6P by kunggom | ★ favorite | 댓글과 토론

컴퓨터에서 정수가 아닌 실수를 표현할 때 주로 사용하는 부동소수점(Floating point) 방식은 아주 넓은 범위의 숫자를 표현할 수 있다는 장점이 있지만, 근사값 표현에 불과하므로 오차가 있어 정확한 숫자 표현이나 계산이 안 된다는 단점이 있습니다. 또한 모든 언어에서 처리가 동일하다는 보장이 없다는 점도 주의해야 하지요. 이렇게 여러 언어에서 서로 조금씩 다른 부동소수점 처리에 대한 내용은 https://0.30000000000000004.com/ 에서 찾아볼 수 있습니다.

Python(대략 3.5 이후 버전)에서 부동소수점 오차로 인한 문제가 있을 때 이를 해결할 수 있는 방법을 설명한 문서를 소개합니다. (한국어) 가장 깔끔한 해결책이 decimal 모듈을 도입하여 십진수 자료형을 사용하는 것이라는군요. 이진법으로 된 부동소수점이 문제라면, 사람처럼 십진법으로 계산하면 문제가 없다는 발상입니다. 실제로 금융이나 회계 등 소수점 계산이 정확해야 하는 분야에서도 이런 방법을 사용한다고 하네요.

p.s.
참고로 IBM 메인프레임에 들어가는 CPU에는 하드웨어적으로 십진수를 계산하는 기능이 들어가는 것으로 알려져 있습니다. 은행 등에서는 아직도 메인프레임을 쓰는 곳이 많으니까요.

댓글과 토론