바닥 지수와 비교 한 정수 부서 : 왜이 놀라운 결과?
-
19-09-2019 - |
문제
그만큼 //
Python의 "Integer Division"운영자는 오늘 저를 놀라게했습니다.
>>> math.floor(11/1.1)
10.0
>>> 11//1.1
9.0
그만큼 선적 서류 비치 "(바닥) x와 y의 몫"을 읽습니다. 그렇다면 왜 Math.floor (11/1.1)가 10과 같지만 11 // 1.1은 9와 같습니까?
해결책
1.1은 이진 형태로 정확하게 표현할 수 없기 때문입니다. 근사치는 1.1보다 높은 리틀러이므로 분할 결과가 너무 작습니다.
다음을 시도하십시오.
Python 2에서 콘솔에 입력하십시오.
>>> 1.1
1.1000000000000001
Python 3.1에는 콘솔이 표시됩니다 1.1
, 그러나 내부적으로는 여전히 같은 숫자입니다.
하지만:
>>> 11/1.1
10.0
Gnibbler가 지적했듯이, 이것은 플로트의 가용 정밀 한계 내에서 "내부 반올림"의 결과입니다. 그리고 Myyn이 그의 의견에서 지적한 것처럼 //
다른 알고리즘을 사용하여 바닥 분할 결과를 계산합니다. math.floor()
보존하기 위해 a == (a//b)*b + a%b
가능합니다.
사용 Decimal
이 정밀도가 필요한 경우 입력하십시오.
제휴하지 않습니다 StackOverflow