python 3 中 long int 除法的差异

Difference in long int division in python 3

我在 python 中做一些大数除法时遇到了一个奇怪的情况。

int(1012337203685477580 / 2) = 506168601842738816

int(1012337203685477580 >> 1) = 506168601842738790 

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

在Python3中,/是真正的除法,所以你会得到一个浮点数结果,以及随之而来的所有精度问题。使用 // 代替整数除法:

>>> 1012337203685477580 / 2
5.061686018427388e+17
>>> 1012337203685477580 // 2
506168601842738790
>>> 1012337203685477580 >> 1
506168601842738790