2013-07-27 3 views
1

왜 이런 일이 발생하며이 문제를 방지하려면 어떻게해야합니까?Python의 부동 소수점 표기

Python 2.7.5 (default, Jun 27 2013, 09:29:43) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 0.3 - 0.1 - 0.1 - 0.1 
2.7755575615628914e-17 
>>> 0.3 - 0.3 
0.0 
>>> 0.3 - 0.2 
0.09999999999999998 
+1

[부동 소수점 제한] (http://stackoverflow.com/questions/406361/floating-point-limitations) 및 http://stackoverflow.com/questions/588004/is-javascripts-floating-point 가능한 복제본 -math-broken –

답변

3

내부적 때문에 컴퓨터 정확하게 모든 0.1, 0.2 또는 0.3와 같은 숫자를 나타낼 수있는 포맷 (이진 부동 소수점)를 사용한다.

코드가 컴파일되거나 해석 될 때 "0.1"은 이미 해당 형식에서 가장 가까운 숫자로 반올림되므로 결과가 계산되기 전에 작은 반올림 오류가 발생합니다. 이 주위에 점점 관심이 있다면 What every programmer should know about floating point: Basic Answers

또한, 고정 소수점 표현을 확인하십시오. Python seems to have a variety of solutions.

+2

포함되어있는'decimal' 모듈이 가장 많이 사용 된 해결책 인 것 같습니다. 문서에서 : * "정확도는 산술로 이어지고 십진 부동 소수점에서는 0.1 + 0.1 + 0.1 - 0.3은 정확히 0과 동일하며 이진 부동 소수점에서 결과는 5.5511151231257827e-017입니다. 차이점은 신뢰할 수있는 동등성 테스트를 방지하고 차이점은 누적 될 수 있습니다. 따라서 동등한 불변성을 갖는 회계 응용 프로그램에서 소수점이 선호됩니다. "* – heltonbiker