2013-06-19 2 views
4

나는 어떻게 뺄셈 및 요약 작업이 방법의 조금 혼란 스러워요 :누구든지이 뺄셈과 합계를 파이썬으로 설명 할 수 있습니까?

A = 5 
B = 0.1 
C = A+B-A 

그리고 대답은 0.099999999999999645입니다 발견했다. 왜 대답이 0.1이 아니겠습니까?

+3

부동 소수점 연산을 위해 천공을 시도하십시오. – Antimony

+1

http://stackoverflow.com/questions/316238/python-float-to-decimal-conversion – kylex

+0

부동 소수점 산술은 본질적으로 정확하지 않습니다. 왜냐하면 모든 숫자가 32 또는 64 비트 값으로 표현 될 수있는 것은 아니기 때문입니다. 모든 컴퓨터 과학자들이 부동 소수점 연산에 대해 알아야 할 내용 : http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Patashu

답변

3

이것은 부동 소수점 반올림 오류를 읽어 보시기 바랍니다. 파이썬 웹 사이트는 실제로 이것이 무엇이고 왜 그것이 일어나는가를 설명하는 정말 좋은 tutorial on floating point numbers을 가지고 있습니다.

당신은 당신이 할 수있는 정확한 결과를 원하는 경우 :

  • 소수점 이하 자릿수의 세트 번호 (이 반올림 오류를 수정하지 않습니다) 표시 decimal 모듈 당신의 결과를
  • 형식을 사용하십시오 :

    print "%.2f"%C

나는 또한 어떤 모든 계산 "읽어 보시기 바랍니다 브라이언 (Brian)의 대답에서 과학자는 부동 소수점 산술에 대해 알아야합니다.

2

무한 정밀도가 아닌 부동 소수점 산술의 인공물이 나타납니다. FP 연산이 작동하는 방법과 반올림 오류가 나타나는 이유에 대한 자세한 설명은 this article을 참조하십시오.

2

이는 소위 엡실론 값 때문입니다. 즉, x에서 x+E까지 모든 부동 소수점 숫자는 x과 같은 것으로 간주됩니다. 당신이 엡실론 값 (E가) 수의 magnitune에 따라 파이썬에서 this Q&A 이 값에 대해 뭔가를 읽을 수 있습니다, 당신은 항상 numpy.spacing(x)

+0

잘못되었습니다. 엡실론은 숫자 –

+0

@gnibbler의 크기에 따라 다르므로 두 개의 부동 소수점 숫자가 같지 않다고 말하고 싶습니까? –

+0

'0.0' 근처의 많은 float 숫자들에 대해서도 마찬가지입니다. 다른 부동 소수점 수와 거의 다릅니다. 지수를 가수의 lsb와 결합하여 특정 숫자에 대한 엡실론을 찾아야합니다. –

2

컴퓨터에서 얻을 수는 "진수"를 사용하여 정보를 저장합니다. 정수는 정확히 저장 될 수 있지만 소수점 숫자는 일반적으로 "부동 소수점 숫자"로 저장됩니다.

2 진 부동 소수점 형식으로 정확하게 표현할 수없는 10 진수로 작성하기 쉬운 숫자가 있으며, 0.1은 그 숫자 중 하나입니다.

숫자를 정확하게 저장할 수 있으며 정확하게 숫자와 함께 작업 할 수 있습니다. 예를 들어 숫자 0.1은 1/10으로 저장 될 수 있습니다. 즉 분자가 분모로 나뉘어져 있다는 것을 알고 분자 (1)와 분모 (10)로 저장 될 수 있습니다. 그런 다음 적절하게 작성된 수학 라이브러리가 이러한 분수로 작업하고 수학을 수행 할 수 있습니다. 그러나 부동 소수점 숫자를 사용하는 것보다 훨씬 느리므로 자주 사용되지는 않습니다. (그리고 저는 은행 업무에서 부동 소수점 대신에 정수를 사용하여 돈을 저장한다고 생각합니다 .123 달러는 암시적인 두 자릿수로 123이라는 숫자로 저장 될 수 있습니다. 돈을 처리 할 때 부동 소수점은 정확하지 않습니다!)

관련 문제