探索浮点数表示
在这一步中,你将探索 Python 中浮点数的表示方式,以及这种表示方式对数值比较可能产生的影响。浮点数用于在计算机中表示实数(带有小数点的数字)。然而,由于它们在内存中的存储方式,它们通常只是实际实数的近似值。这可能会在进行比较时导致意外的结果。
首先,使用 VS Code 编辑器在你的 ~/project
目录下创建一个名为 float_representation.py
的 Python 文件。
## Create a floating-point number
x = 0.1 + 0.2
## Print the value of x
print(x)
保存文件,然后在终端中使用以下命令执行它:
python float_representation.py
你可能期望输出为 0.3
,但你可能会看到类似这样的结果:
0.30000000000000004
这是因为 0.1
和 0.2
无法精确地表示为浮点数。加法的结果是一个非常接近 0.3
但并不完全相等的数字。
现在,让我们看看这种不精确性如何影响比较。在你的 float_representation.py
文件中添加以下代码:
## Create a floating-point number
x = 0.1 + 0.2
## Check if x is equal to 0.3
if x == 0.3:
print("x is equal to 0.3")
else:
print("x is not equal to 0.3")
保存文件并再次运行:
python float_representation.py
你可能会看到以下输出:
x is not equal to 0.3
这是因为由于浮点数表示问题,x
并不完全等于 0.3
。
为了准确地比较浮点数,你应该使用一个容差值。不要检查是否完全相等,而是检查两个数字之间的绝对差值是否小于一个小的容差值。
修改你的 float_representation.py
文件以包含容差:
## Create a floating-point number
x = 0.1 + 0.2
## Define a tolerance value
tolerance = 1e-9 ## A small value like 0.000000001
## Check if x is approximately equal to 0.3
if abs(x - 0.3) < tolerance:
print("x is approximately equal to 0.3")
else:
print("x is not approximately equal to 0.3")
保存文件并再次运行:
python float_representation.py
现在,你应该会看到以下输出:
x is approximately equal to 0.3
通过使用容差,尽管浮点数表示存在固有的不精确性,你仍然可以准确地比较它们。在 Python 和其他编程语言中处理浮点数时,这是一个需要理解的关键概念。