6P by kunggom 2020-01-07 | favorite | 댓글과 토론

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

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

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