python 3中long int division的区别

san*_*eps 5 python division integer-division python-3.x long-integer

在python中进行大量分割时,我遇到了一个奇怪的情况.

int(1012337203685477580 / 2) = 506168601842738816
Run Code Online (Sandbox Code Playgroud)

和

int(1012337203685477580 >> 1) = 506168601842738790 
Run Code Online (Sandbox Code Playgroud)

为什么两种方法之间存在差异?int()似乎至少是int64,因为int(2 ^ 63 - 1)和2 ^ 63 - 1是相同的值.

小智 4

在Python 3中,/是真正的除法,因此您将得到浮点结果,以及随之而来的所有精度问题。用于//整数除法:

>>> 1012337203685477580 / 2
5.061686018427388e+17
>>> 1012337203685477580 // 2
506168601842738790
>>> 1012337203685477580 >> 1
506168601842738790
Run Code Online (Sandbox Code Playgroud)