使用科学记数法,两个不同的浮点数评估为相等
以下表达式的计算结果为何为真?
In [0]: 1e18 == (1e18 + 50)
Out[0]: True
当用取幂代替科学记数法时,正如人们所预期的那样,它评估为False:
In [1]: 10**18 == (10**18 + 50)
Out[1]: False
回答
你没有两对花车。最重要的例子是科学记数法,是一对浮点数。由于添加的差异小于浮点精度,因此它们比较相等。
下面的例子是一对整数。您可以使用该type功能轻松检查这一点。Python 的长整数在保持所需的 18 位精度方面没有问题。
>>> type(1e18)
<class 'float'>
>>> type(10**18)
<class 'int'>