Python3 LargeNumber ** 1 和 1.0 的不同结果

Python3 different results with LargeNumber ** 1 and 1.0

largenumber = 821424692950225218
largenumber ** 1 = 821424692950225218
largenumber ** 1.0 = 8.214246929502253e+17
int(largenumber**1.0) = 821424692950225280

为什么结果不同?

浮点数的存在强制在具有 limited precision 的浮点上下文中执行操作。另一方面,在所有参数都是整数的情况下,Python 让 ** 保留在整数域中,其精度仅受可用内存的限制。一旦结果为浮点数,转换为 int 将无法恢复丢弃的信息。

tl;dr:largenumber ** 1.0 等同于 float(largenumber)