2017-04-18 3 views
4

매우 큰 짝수를 나눕니다. 13144131834269512219260941993714669605006625743172006030529504645527800951523697620149903055663251854220067020503783524785523675819158836547734770656069476 둘 다 구분과 층 구분을 사용했지만 두 가지 답변을 제공합니다. 생각은 동일해야합니다. 그래서 나는 누군가가 차이가 어떤 결과를 말해 줄 수있다 파이썬 3.5에서 짝수를 나눌 때 왜 나누기와 플로어 나누기가 다른 대답을 주는가

int(x/2) = 6572065917134756165333387211683112531415896759844144557192219233347999705289073358407747856661759761476763448808302430806962124152349175018830474952835072 
int(x//2) = 6572065917134756109630470996857334802503312871586003015264752322763900475761848810074951527831625927110033510251891762392761837909579418273867385328034738 

있어? 감사

+7

'INT()'에'//'중복됩니다. '/'는 * float *을 생성하며, 부동 소수점 수에는 한계가 있습니다. 당신이 그들을 초과했습니다. –

답변

5

/ 진정한 부문은 항상 부동 소수점 결과를 생성, 당신은 정확하게 수레와 전화 번호를 모델링 할 수 없습니다

6 시간 10^153 만 float는 53 이진수를 수행 할 수있어
>>> huge = 13144131834269512219260941993714669605006625743172006030529504645527800951523697620149903055663251854220067020503783524785523675819158836547734770656069476 
>>> huge/2 
6.572065917134756e+153 
>>> type(huge/2) 
<class 'float'> 

가수의 정밀도 :

>>> import sys 
>>> sys.float_info.mant_dig 
53 

부동 소수점에 대한 것을 의미 소수 부분을 모델링 진 분획 사용 가능한 십진수의 대다수, 이것은 근사치 일뿐입니다.

이 값을 int()으로 변환하면 손실 된 정밀도가 반환되지 않습니다. 반면에

// 바닥 부문은 정수 입력을위한 정수를 생산하고 정수 임의의 정밀도를, 그래서 아무 것도 손실되지 않습니다 :

>>> type(huge // 2) 
<class 'int'> 
+0

'sys.float_info.mant_dig'에서 가면을 얻을 수있는 동안 모든 플랫폼에서 53이라고 말하는 것이 맞습니까? –

+0

@LabrysKnossos : Python이 실행되는 모든 현대 플랫폼에서 53 일 것으로 예상됩니다. –