我在使用Python进行大数除法时,遇到了一种奇怪的情况。
int(1012337203685477580 / 2) = 506168601842738816
and
int(1012337203685477580 >> 1) = 506168601842738790
为什么这两种方法会有差异?int() 方法似乎至少是 int64,因为 int(2^63 - 1) 和 2^63 - 1 是相同的值。
我在使用Python进行大数除法时,遇到了一种奇怪的情况。
int(1012337203685477580 / 2) = 506168601842738816
and
int(1012337203685477580 >> 1) = 506168601842738790
为什么这两种方法会有差异?int() 方法似乎至少是 int64,因为 int(2^63 - 1) 和 2^63 - 1 是相同的值。
/
是真除法,因此您将获得一个浮点数结果,以及所有与之相关的精度问题。使用 //
进行整数除法:>>> 1012337203685477580 / 2
5.061686018427388e+17
>>> 1012337203685477580 // 2
506168601842738790
>>> 1012337203685477580 >> 1
506168601842738790
int
?把这些调用去掉,它们会隐藏问题的根源。 - user2357112