2012-10-11 2 views
6

숫자가 양수인 경우 부동 소수점 결과의 잘라 내기와 같은 대답을 항상 반환한다는 것을 알고 있습니다. 둘 중 하나 또는 둘 다 부정적이라면 사실입니까?정수 나누기 : // b == int (a/b)는 모든 정수 a, b에 대해 참입니까?

파이썬 2와 파이썬 3에서 똑같은 결과를 반환하는 정수형 표현식이 있는지 알고 싶습니다. (예, from __future__ import division에 대해 알고 있습니다).

P. 잠시 부동 소수점 오버플로를 무시해 봅시다.

+1

* "정수 분할 표현이기 때문이다 Python 3 "* 다시 오시겠습니까? – NullUserException

+1

@NullUserException, Python 3에서'/'를 사용하여 두 개의 정수를 나눌 경우 부동 소수점 결과를 얻습니다. 이것은 Python 2에서 큰 변화입니다. 이전 동작을 얻으려면'// '가 필요합니다. –

+0

나는 그들이 왜 float에 auto upcast를하는지 이해하지 못한다 .... 나에게는 어리석은 것처럼 보인다. 나는'int/int = int'가 CS의 핵심 교리라는 것을 의미한다 ... –

답변

9

그것은 파이썬 3 사실이 아니다, 당신은 자신을 위해 테스트 할 수

>>> int(-1/3) == -1//3 
False 

정수 나누기 및 a의 모듈 및 bq (지수)와 r (나머지)를 제공하는 각각 항상 숫자를 반환합니다 b*q + r == a(a*b)>0 == q>0 (즉, a*bq은 같은 부호를 가짐) 및 abs(r) < abs(q)을 만족하는. 숫자 int(q)q이 부동 소수점 수인 경우 항상 0으로 반올림됩니다.

항상 파이썬이 당신이 from __future__ import division을하지 않는 마찬가지 수 있지만 a/b == a//ba 경우 b 정수는 파이썬으로 파이썬 2와 동일한 결과를 반환 2.

+0

'>>> int (-1/3) == -1 // 3' ->' True' 나는 py26에서 그것을 시도했을 때 사실이라는 것을 알았습니다 ... –

+0

@JoranBeasley - 파이썬 2.6에서 'a'와'b'가 정수인 경우'a/b == a // b'입니다. – Omnifarious

+0

@JoranBeasley Python 2에서 두 개의 정수 피연산자가있는'/'는 정확히'/'무엇을하는지 않습니다. 우리는 여기서 파이썬 3 (호환성)에 대해 이야기하고 있습니다. 파이썬 3에서는 서로 다릅니다. – delnan