2010-02-12 3 views
3

가능한 중복 :
Python float - str - float weirdness파이썬에서 2/5.0을 나눌 때 오류가있는 이유는 무엇입니까?

파이썬에서

, 2/5.0 또는 2/float(5) 반환 0.40000000000000002

이유는 마지막에 그 오류를 얻는 방법은 내가 올바른 값을 얻을 수 있습니다 추가 계산에 사용 하시겠습니까?

+4

귀하의 숙력 : * 모든 컴퓨터 과학자가 부동 소수점 연산에 대해 알아야 할 사항 * http://docs.sun.com/source/806-3568/ncg_goldberg.html –

+3

python tutorial에서 설명하는 내용 : http : // docs. python.org/tutorial/floatingpoint.html – nosklo

+0

여러 개의 질문이 중복되었습니다. 검색하십시오. 이들 모두 : http://stackoverflow.com/search?q=[python]+floating+point. 특히이 : http : // stackoverflow.com/questions/1778368/python-float-str-float-weirdness –

답변

22

환영합니다 IEEE754, enjoy your stay.

대신 decimal을 사용하십시오.

+0

불행한 진실에 대한 설명을 +1하십시오. 유용한 솔루션입니다. 간결하게 넣으십시오. – MattH

+1

튜토리얼의이 섹션 http://docs.python.org/tutorial/floatingpoint.html에서이 문제를 설명합니다. 파이썬 방법 – nosklo

+8

대신 십진법을 사용하면 무서운 조언이됩니다. 십진수는 ** 같은 문제가 있습니다 ** (예를 들어, 2/5 대신 2/3을 나타낼 경우),'decimal.Decimal'은 많은 패키지와 호환되지 않습니다. 느리고 구문 적으로 더 많은 문제가 있습니다. . –

1

설명은 this question을 참조하십시오. 올바른 방법은 반올림 오류가있는

  • 라이브 "마지막"계산까지 중 하나

    1. 를 사용하여 정수로 할 것이다.
  • 3

    부동 소수점 연산이 정확하지 않기 때문에. 추가 계산에이 값을 사용하고 작업이 끝나면 결과를 반올림해야합니다. 정확히 필요하면 다른 데이터 형식을 사용하십시오.

    2

    위의 Ignacio는 정답입니다.

    이진 컴퓨터에 부동 소수점 숫자를 효율적으로 저장하기위한 IEEE 표준이 있습니다. 숫자가 저장되는 방식과 정확히 모든 컴퓨터에서 이러한 규칙을 따르는 방법에 대한 자세한 설명은 무시 무시한 내용입니다.

    그들은 또한 잘못되었습니다. 2 진수는 대부분의 일반 숫자를 처리 할 수 ​​없으며 2의 거듭 제곱을 처리 할 수 ​​있습니다. 바닥 비트를 반올림하거나 다른 트릭으로 재 계산해야하는 까다로운 작업을하는 대신, 표준은 효율성을 선택합니다.

    그런 식으로하면 시스템에서 약간 빠른 속도로 저주 할 수 있습니다. 이러한 문제를 해결하기 위해 Python을 어떤 식 으로든 변경하는 것에 대한 토론이 때때로 있습니다. 그러나 응답은 효율성면에서 큰 손실없이 사소한 것이 아닙니다.

    이 주위 방법 :

    하나의 옵션은 표준 라이브러리의 '진수'패키지로 파고있다. 예제를 고수하고 긴 페이지를 무시하면 원하는 것을 얻을 수 있습니다. 효율에 대한 어떠한 배팅도하지 않습니다.

    두 번째는 하나의 출력 기능에서 수동 반올림 및 문자열 자르기입니다. 당신이 그 비트들을 인쇄하지 않는다면 그 숫자가 조금이라도 부족하다면 누가 신경 쓰나요?

    +4

    'decimal '을 사용하면 **이 문제를 해결하지 못합니다 **. 십진수는 이진 부동 소수점 수보다 모든 이성을 표현할 수 없습니다. 예를 2/5에서 2/3로 바꾸십시오. –

    2

    Python 3.1에는 이러한 종류의 모양을 피하는 새로운 부동 소수점 서식 지정 기능이 있습니다. 자세한 내용은 What's new in Python 3.1을 참조하십시오 ("부동 소수점"으로 검색).

    관련 문제