介绍
在这个实验中,你将学习如何在 Python 中检查一个数字是否接近另一个数字,解决浮点数比较的挑战。你将首先了解数值接近度的概念,以及由于计算机表示浮点数的方式,这种比较为何重要,因为在比较浮点数是否相等时,可能会导致意外的结果。一个 Python 脚本将通过计算 0.1 + 0.2 并将结果与 0.3 进行比较来说明这一概念,展示由于浮点数表示方式可能导致的不相等情况。
然后,实验将指导你通过计算两个数字之间的绝对差值,作为确定接近度的一种方法。最后,你将学习如何使用 math.isclose() 函数对浮点数进行更可靠的比较,同时考虑相对容差和绝对容差。
理解数值接近性
在这一步中,我们将探讨数值接近度的概念及其在编程中的重要性,尤其是在处理浮点数时。由于计算机表示浮点数的方式,它们通常是实数的近似值。这可能会在比较它们是否相等时导致意外的结果。
数值接近度帮助我们确定两个数字是否“足够接近”,从而可以认为它们相等,即使它们并不完全相同。这在处理涉及浮点运算的计算时特别有用。
让我们通过创建一个 Python 脚本来阐述这个概念。
在 LabEx 环境中打开 VS Code 编辑器。
在
~/project目录下创建一个名为proximity.py的新文件。~/project/proximity.py将以下代码添加到
proximity.py中:## proximity.py num1 = 0.1 + 0.2 num2 = 0.3 print(f"num1 is: {num1}") print(f"num2 is: {num2}") if num1 == num2: print("num1 and num2 are equal") else: print("num1 and num2 are not equal")这个脚本计算
0.1 + 0.2并将结果与0.3进行比较。保存文件并在终端中使用以下命令运行它:
python ~/project/proximity.py你应该会看到类似以下的输出:
num1 is: 0.30000000000000004 num2 is: 0.3 num1 and num2 are not equal如你所见,由于浮点数的表示方式,
num1和num2并不完全相等,尽管从数学角度来看它们应该相等。这就是数值接近度概念变得重要的地方。在接下来的步骤中,我们将探索处理这种情况的方法。
计算绝对差值
在这一步中,你将学习如何计算两个数字之间的绝对差值。绝对差值是两个数字之间差值的大小,与它们的顺序无关。换句话说,它是两个数字之间的正差值。
你可以使用 Python 中的 abs() 函数来计算绝对差值。abs() 函数返回一个数字的绝对值。
让我们修改上一步中的 proximity.py 脚本,以计算 num1 和 num2 之间的绝对差值。
使用 VS Code 编辑器打开
~/project目录下的proximity.py文件。修改代码以计算绝对差值:
## proximity.py num1 = 0.1 + 0.2 num2 = 0.3 print(f"num1 is: {num1}") print(f"num2 is: {num2}") absolute_difference = abs(num1 - num2) print(f"The absolute difference between num1 and num2 is: {absolute_difference}") if absolute_difference < 0.00001: ## Using a small tolerance print("num1 and num2 are approximately equal") else: print("num1 and num2 are not approximately equal")在这段代码中,我们使用
abs()函数计算num1和num2之间的绝对差值。然后,我们将绝对差值与一个小的容差值(在本例中为 0.00001)进行比较。如果绝对差值小于容差,我们就认为这两个数字近似相等。保存文件并在终端中使用以下命令运行它:
python ~/project/proximity.py你应该会看到类似以下的输出:
num1 is: 0.30000000000000004 num2 is: 0.3 The absolute difference between num1 and num2 is: 4.440892098500626e-17 num1 and num2 are approximately equal现在,该脚本通过考虑绝对差值和容差值,正确地识别出
num1和num2近似相等。这种方法比直接比较浮点数是否相等更为可靠。
对浮点数使用 math.isclose() 函数
在这一步中,你将学习如何使用 math.isclose() 函数来比较浮点数是否近似相等。与使用固定容差相比,math.isclose() 函数是一种更可靠且推荐的比较浮点数的方法。
math.isclose() 函数接受两个数字作为输入,如果它们在指定的容差范围内彼此接近,则返回 True,否则返回 False。它提供了两个容差参数:rel_tol(相对容差)和 abs_tol(绝对容差)。
让我们修改上一步中的 proximity.py 脚本,以使用 math.isclose() 函数。
使用 VS Code 编辑器打开
~/project目录下的proximity.py文件。修改代码以使用
math.isclose():## proximity.py import math num1 = 0.1 + 0.2 num2 = 0.3 print(f"num1 is: {num1}") print(f"num2 is: {num2}") if math.isclose(num1, num2): print("num1 and num2 are approximately equal") else: print("num1 and num2 are not approximately equal")在这段代码中,我们导入了
math模块,并使用math.isclose()函数来比较num1和num2。我们使用了rel_tol和abs_tol的默认值,这些值适用于大多数情况。保存文件并在终端中使用以下命令运行它:
python ~/project/proximity.py你应该会看到类似以下的输出:
num1 is: 0.30000000000000004 num2 is: 0.3 num1 and num2 are approximately equal现在,脚本使用
math.isclose()函数正确地识别出num1和num2近似相等。这是在 Python 中比较浮点数近似相等的推荐方法。
总结
在本次实验中,你首先探索了数值接近性的概念,以及在 Python 中比较浮点数时它的重要性。由于计算机表示浮点数的方式,直接进行相等性比较可能并不可靠。你创建了一个 proximity.py 脚本来说明这个问题,在脚本中比较了 0.1 + 0.2 和 0.3,结果显示由于浮点数的表示方式,它们并不完全相等。
接着,本次实验介绍了需要采用其他方法来判断两个数字是否“足够接近”从而可以被视为相等,这为后续步骤中探索诸如计算绝对差值等技术奠定了基础(内容截断)。



