问题描述
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)
。