부동 소수점 숫자는 대부분의 10 진수를 정확하게 표현할 수 없으므로 부동 소수점 리터럴을 입력하면 실제로 해당 리터럴의 근사값을 얻습니다. 근사값은 입력 한 숫자보다 크거나 작을 수 있습니다.
부동 소수점 숫자를 10 진수 또는 분수로 캐스트하여 정확한 값을 볼 수 있습니다.
>>> from decimal import Decimal
>>> Decimal(0.01)
Decimal('0.01000000000000000020816681711721685132943093776702880859375')
>>> from fractions import Fractio
>>> Fraction(0.01)
Fraction(5764607523034235, 576460752303423488)
분수 유형을 사용하여 부정확 한 리터럴로 인한 오류를 찾을 수 있습니다.
>>> float((Fraction(1)/Fraction(0.01)) - 100)
-2.0816681711721685e-15
우리는 또한 numpy에서 nextafter를 사용하여 100 정도의 세부 배정도 부동 소수점 숫자가 얼마나되는지 알아낼 수 있습니다.
>>> from numpy import nextafter
>>> nextafter(100,0)-100
-1.4210854715202004e-14
이것으로부터 우리는 가장 가까운 부동 소수점 숫자 1/0.01000000000000000020816681711721685132943093776702880859375가 실제로 100이라는 것을 추측 할 수 있습니다 .
차이 1//0.01와 int(1/0.01)반올림된다. 1 // 0.01은 정확한 결과를 한 번에 다음 정수로 내림합니다. 결과는 99입니다.
반면에 int (1 / 0.01)은 두 단계로 반올림됩니다. 먼저 결과를 가장 가까운 배정 밀도 부동 소수점 숫자 (정확히 100 임)로 반올림 한 다음 부동 소수점 숫자를 다음 정수로 반올림합니다. 다시 정확히 100).