Introducción
En este laboratorio, aprenderás cómo verificar si un número está cerca de otro en Python, abordando los desafíos de las comparaciones de números de punto flotante. Comenzarás por entender el concepto de proximidad numérica y su importancia debido a la forma en que las computadoras representan los números de punto flotante, lo que puede llevar a resultados inesperados al compararlos para verificar la igualdad. Un script de Python ilustrará este concepto calculando 0.1 + 0.2 y comparando el resultado con 0.3, demostrando la posibilidad de desigualdad debido a la representación de punto flotante.
Luego, el laboratorio te guiará a través del cálculo de la diferencia absoluta entre dos números como un enfoque para determinar la proximidad. Finalmente, aprenderás cómo usar la función math.isclose() para comparaciones más sólidas de números de punto flotante, teniendo en cuenta tanto las tolerancias relativas como absolutas.
Comprender la proximidad numérica
En este paso, exploraremos el concepto de proximidad numérica y su importancia en la programación, especialmente cuando se trata de números de punto flotante. Debido a la forma en que las computadoras representan los números de punto flotante, a menudo son aproximaciones de números reales. Esto puede llevar a resultados inesperados al compararlos para verificar la igualdad.
La proximidad numérica nos ayuda a determinar si dos números están "lo suficientemente cerca" como para considerarse iguales, incluso si no son exactamente iguales. Esto es especialmente útil cuando se realizan cálculos que involucran aritmética de punto flotante.
Comencemos creando un script de Python para ilustrar este concepto.
Abre el editor de VS Code en el entorno de LabEx.
Crea un nuevo archivo llamado
proximity.pyen el directorio~/project.~/project/proximity.pyAgrega el siguiente código a
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")Este script calcula
0.1 + 0.2y compara el resultado con0.3.Guarda el archivo y ejecútalo utilizando el siguiente comando en la terminal:
python ~/project/proximity.pyDeberías ver una salida similar a esta:
num1 is: 0.30000000000000004 num2 is: 0.3 num1 and num2 are not equalComo puedes ver,
num1ynum2no son exactamente iguales debido a la representación de punto flotante, aunque matemáticamente deberían serlo. Aquí es donde el concepto de proximidad numérica se vuelve importante. En los siguientes pasos, exploraremos formas de manejar esta situación.
Calcular la diferencia absoluta
En este paso, aprenderemos cómo calcular la diferencia absoluta entre dos números. La diferencia absoluta es la magnitud de la diferencia entre dos números, independientemente de su orden. En otras palabras, es la diferencia positiva entre dos números.
Podemos usar la función abs() en Python para calcular la diferencia absoluta. La función abs() devuelve el valor absoluto de un número.
Modifiquemos el script proximity.py del paso anterior para calcular la diferencia absoluta entre num1 y num2.
Abre el archivo
proximity.pyen el directorio~/projectutilizando el editor de VS Code.Modifica el código para calcular la diferencia absoluta:
## 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")En este código, calculamos la diferencia absoluta entre
num1ynum2utilizando la funciónabs(). Luego, comparamos la diferencia absoluta con un valor de tolerancia pequeño (0.00001 en este caso). Si la diferencia absoluta es menor que la tolerancia, consideramos que los números son aproximadamente iguales.Guarda el archivo y ejecútalo utilizando el siguiente comando en la terminal:
python ~/project/proximity.pyDeberías ver una salida similar a esta:
num1 is: 0.30000000000000004 num2 is: 0.3 The absolute difference between num1 and num2 is: 4.440892098500626e-17 num1 and num2 are approximately equalAhora, el script identifica correctamente que
num1ynum2son aproximadamente iguales al considerar la diferencia absoluta y un valor de tolerancia. Este enfoque es más robusto que comparar directamente números de punto flotante para verificar la igualdad.
Usar math.isclose() para números de punto flotante
En este paso, aprenderemos cómo usar la función math.isclose() para comparar números de punto flotante y verificar su igualdad aproximada. La función math.isclose() es una forma más robusta y recomendada de comparar números de punto flotante que usar una tolerancia fija.
La función math.isclose() toma dos números como entrada y devuelve True si están cerca el uno del otro dentro de una tolerancia especificada, y False en caso contrario. Proporciona dos parámetros de tolerancia: rel_tol (tolerancia relativa) y abs_tol (tolerancia absoluta).
Modifiquemos el script proximity.py del paso anterior para usar la función math.isclose().
Abre el archivo
proximity.pyen el directorio~/projectutilizando el editor de VS Code.Modifica el código para usar
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")En este código, importamos el módulo
mathy usamos la funciónmath.isclose()para compararnum1ynum2. Usamos los valores predeterminados pararel_tolyabs_tol, que son adecuados para la mayoría de los casos.Guarda el archivo y ejecútalo utilizando el siguiente comando en la terminal:
python ~/project/proximity.pyDeberías ver una salida similar a esta:
num1 is: 0.30000000000000004 num2 is: 0.3 num1 and num2 are approximately equalEl script ahora identifica correctamente que
num1ynum2son aproximadamente iguales utilizando la funciónmath.isclose(). Esta es la forma recomendada de comparar números de punto flotante para verificar su igualdad aproximada en Python.
Resumen
En este laboratorio, comenzamos explorando el concepto de proximidad numérica y su importancia al comparar números de punto flotante en Python. Debido a la forma en que las computadoras representan estos números, las comparaciones de igualdad directas pueden ser poco confiables. Creamos un script proximity.py para demostrar este problema, donde se comparó 0.1 + 0.2 con 0.3, lo que reveló que no son exactamente iguales debido a la representación de punto flotante.
Luego, el laboratorio introdujo la necesidad de métodos alternativos para determinar si dos números son "lo suficientemente cercanos" como para considerarse iguales, sentando las bases para explorar técnicas como el cálculo de la diferencia absoluta en pasos posteriores (contenido truncado).



