首页 > 解决方案 > python中ab ==0和a ==b有什么区别

问题描述

这是代码。

import math

a = math.pow(10,100)
b = 10 ** 100
c = 10 ** 100

print(a==b)   # false
print(a-b==0) # true

我知道 math.pow 不正确,而数字太大。但是如何理解下一点 a == b 与 ab == 0 不同?

我的 python 版本是 3.9.6 64bit

标签: python

解决方案


这是因为浮点数错误可能发生在大浮点数或小浮点数上。在https://docs.python.org/3/tutorial/floatingpoint.html上查看更多信息

浮点数存储为 53 位。所以这个问题不会发生在浮点数低于4503599627370496. 有关详细信息,请参阅https://en.wikipedia.org/wiki/IEEE_754-1985

import math

a = math.pow(10,100)
b = 10 ** 100

print(type(a))  # float
print(type(b))  # int

我们可以看到它a是一个浮点数并且b是一个整数。

print(int(a)) # 10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104

如果我们转换a成 int,我们会看到数字已经改变,不再是math.pow(10,100)

print(a==b)  # false
print(int(a)==int(b))   # false
print(float(a)==float(b))   # true
print(a-b==0) # true

如果我们尝试将两者都转换为 int 它将与a==b但如果我们将两者都转换为 float 它将起作用。那是因为两个数字都会得到相同的转换错误。

当我们这样做时print(a-b==0),它将被正确转换。


推荐阅读