이것은 실제로 파이썬과 아무 관련이 없습니다. 하드웨어의 바이너리 부동 소수점 산술을 사용하여 모든 언어에서 동일한 동작을 볼 수 있습니다. 먼저 read the docs.
이 글을 읽은 후에는 이 아니고이 아니라 코드의 1/100을 더 잘 이해할 것입니다.
>>> from decimal import Decimal
>>> Decimal(.01)
Decimal('0.01000000000000000020816681711721685132943093776702880859375')
그 문자열은 이진 부동 (C에서 "이중 정밀도")의 정확한 진수 값을 보여줍니다 근사치를 정확한 소수점 값 0.01 : 이렇게하면 추가 정확히 것입니다. 당신이 실제로 추가하는 것은 1/100보다 약간 큰 것입니다.
부동 소수점 오류 제어는 "수치 해석"이라는 필드이며 매우 크고 복잡한 주제입니다. 부동 소수점은 10 진수 값의 근사치에 불과하다는 사실에 깜짝 놀랐다면 decimal
모듈을 사용하십시오. 그것은 당신에게 "얕은"문제의 세계를 빼앗아 갈 것입니다. 다음
from decimal import Decimal as D
def sqrt(num):
root = D(0)
while root * root < num:
root += D("0.01")
return root
: 예를 들어, 기능이 작은 수정을 부여
>>> sqrt(4)
Decimal('2.00')
>>> sqrt(9)
Decimal('3.00')
그것은 정말 더 정확한 건 아니지만, 지금은 정확히 하나 하나 를 추가 있기 때문에 간단한 예제 덜 놀라운 일이 될 수있다 -백.
부동 소수점을 고수하고 이 인 것을 이진 부동 소수로 정확하게 표현할 수 있습니다 : I/2**J
형식의 값. 예를 들어, 0.01을 더하는 대신 0.125 (1/8) 또는 0.0625 (1/16)를 더하십시오.
그리고있는이, 제곱근 ;-)에게
아마 시도 [진] (http://docs.python.org/2/library/decimal.html) 모듈을 계산하기위한 "뉴턴의 방법"을 찾아 정밀도를 위해 설계된가요? – Michael0x2a