Python 3中long int除法的区别

5

我在使用Python进行大数除法时,遇到了一种奇怪的情况。

int(1012337203685477580 / 2) = 506168601842738816

and

int(1012337203685477580 >> 1) = 506168601842738790 

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


2
你为什么调用 int?把这些调用去掉,它们会隐藏问题的根源。 - user2357112
1
另外,请查看这个问题:https://dev59.com/A3rZa4cB1Zd3GeqP5rJ5 - user6732794
1个回答

4
在Python 3中,/ 是真除法,因此您将获得一个浮点数结果,以及所有与之相关的精度问题。使用 // 进行整数除法:
>>> 1012337203685477580 / 2
5.061686018427388e+17
>>> 1012337203685477580 // 2
506168601842738790
>>> 1012337203685477580 >> 1
506168601842738790

太好了!感谢你的回答。这问题让我烦透了! :) - sandeeps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接