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)
。
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)
。