나는 어떻게 뺄셈 및 요약 작업이 방법의 조금 혼란 스러워요 :누구든지이 뺄셈과 합계를 파이썬으로 설명 할 수 있습니까?
A = 5
B = 0.1
C = A+B-A
그리고 대답은 0.099999999999999645입니다 발견했다. 왜 대답이 0.1이 아니겠습니까?
나는 어떻게 뺄셈 및 요약 작업이 방법의 조금 혼란 스러워요 :누구든지이 뺄셈과 합계를 파이썬으로 설명 할 수 있습니까?
A = 5
B = 0.1
C = A+B-A
그리고 대답은 0.099999999999999645입니다 발견했다. 왜 대답이 0.1이 아니겠습니까?
왜 대답이 0.1이 아니겠습니까?
부동 소수점 숫자로는 대답을 얻을 수 없습니다. 그러나 거룩한 암소는 이제까지 닫힙니다!
나는 당신이 "What Every Computer Scientist Should Know About Floating-Point Arithmetic"
이것은 부동 소수점 반올림 오류를 읽어 보시기 바랍니다. 파이썬 웹 사이트는 실제로 이것이 무엇이고 왜 그것이 일어나는가를 설명하는 정말 좋은 tutorial on floating point numbers을 가지고 있습니다.
당신은 당신이 할 수있는 정확한 결과를 원하는 경우 :
형식을 사용하십시오 :
print "%.2f"%C
나는 또한 어떤 모든 계산 "읽어 보시기 바랍니다 브라이언 (Brian)의 대답에서 과학자는 부동 소수점 산술에 대해 알아야합니다.
무한 정밀도가 아닌 부동 소수점 산술의 인공물이 나타납니다. FP 연산이 작동하는 방법과 반올림 오류가 나타나는 이유에 대한 자세한 설명은 this article을 참조하십시오.
이는 소위 엡실론 값 때문입니다. 즉, x
에서 x+E
까지 모든 부동 소수점 숫자는 x
과 같은 것으로 간주됩니다. 당신이 엡실론 값 (E
가) 수의 magnitune에 따라 파이썬에서 this Q&A 이 값에 대해 뭔가를 읽을 수 있습니다, 당신은 항상 numpy.spacing(x)
잘못되었습니다. 엡실론은 숫자 –
@gnibbler의 크기에 따라 다르므로 두 개의 부동 소수점 숫자가 같지 않다고 말하고 싶습니까? –
'0.0' 근처의 많은 float 숫자들에 대해서도 마찬가지입니다. 다른 부동 소수점 수와 거의 다릅니다. 지수를 가수의 lsb와 결합하여 특정 숫자에 대한 엡실론을 찾아야합니다. –
컴퓨터에서 얻을 수는 "진수"를 사용하여 정보를 저장합니다. 정수는 정확히 저장 될 수 있지만 소수점 숫자는 일반적으로 "부동 소수점 숫자"로 저장됩니다.
2 진 부동 소수점 형식으로 정확하게 표현할 수없는 10 진수로 작성하기 쉬운 숫자가 있으며, 0.1은 그 숫자 중 하나입니다.
숫자를 정확하게 저장할 수 있으며 정확하게 숫자와 함께 작업 할 수 있습니다. 예를 들어 숫자 0.1은 1/10
으로 저장 될 수 있습니다. 즉 분자가 분모로 나뉘어져 있다는 것을 알고 분자 (1)와 분모 (10)로 저장 될 수 있습니다. 그런 다음 적절하게 작성된 수학 라이브러리가 이러한 분수로 작업하고 수학을 수행 할 수 있습니다. 그러나 부동 소수점 숫자를 사용하는 것보다 훨씬 느리므로 자주 사용되지는 않습니다. (그리고 저는 은행 업무에서 부동 소수점 대신에 정수를 사용하여 돈을 저장한다고 생각합니다 .123 달러는 암시적인 두 자릿수로 123이라는 숫자로 저장 될 수 있습니다. 돈을 처리 할 때 부동 소수점은 정확하지 않습니다!)
부동 소수점 연산을 위해 천공을 시도하십시오. – Antimony
http://stackoverflow.com/questions/316238/python-float-to-decimal-conversion – kylex
부동 소수점 산술은 본질적으로 정확하지 않습니다. 왜냐하면 모든 숫자가 32 또는 64 비트 값으로 표현 될 수있는 것은 아니기 때문입니다. 모든 컴퓨터 과학자들이 부동 소수점 연산에 대해 알아야 할 내용 : http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Patashu