Cómo comprobar si un número está cerca de otro en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/BasicConceptsGroup -.-> python/numeric_types("Numeric Types") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") subgraph Lab Skills python/numeric_types -.-> lab-559546{{"Cómo comprobar si un número está cerca de otro en Python"}} python/conditional_statements -.-> lab-559546{{"Cómo comprobar si un número está cerca de otro en Python"}} python/build_in_functions -.-> lab-559546{{"Cómo comprobar si un número está cerca de otro en Python"}} end

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.

  1. Abre el editor de VS Code en el entorno de LabEx.

  2. Crea un nuevo archivo llamado proximity.py en el directorio ~/project.

    ~/project/proximity.py
  3. Agrega 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.2 y compara el resultado con 0.3.

  4. Guarda el archivo y ejecútalo utilizando el siguiente comando en la terminal:

    python ~/project/proximity.py

    Deberías ver una salida similar a esta:

    num1 is: 0.30000000000000004
    num2 is: 0.3
    num1 and num2 are not equal

    Como puedes ver, num1 y num2 no 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.

  1. Abre el archivo proximity.py en el directorio ~/project utilizando el editor de VS Code.

  2. 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 num1 y num2 utilizando la función abs(). 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.

  3. Guarda el archivo y ejecútalo utilizando el siguiente comando en la terminal:

    python ~/project/proximity.py

    Deberí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 equal

    Ahora, el script identifica correctamente que num1 y num2 son 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().

  1. Abre el archivo proximity.py en el directorio ~/project utilizando el editor de VS Code.

  2. 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 math y usamos la función math.isclose() para comparar num1 y num2. Usamos los valores predeterminados para rel_tol y abs_tol, que son adecuados para la mayoría de los casos.

  3. Guarda el archivo y ejecútalo utilizando el siguiente comando en la terminal:

    python ~/project/proximity.py

    Deberías ver una salida similar a esta:

    num1 is: 0.30000000000000004
    num2 is: 0.3
    num1 and num2 are approximately equal

    El script ahora identifica correctamente que num1 y num2 son aproximadamente iguales utilizando la función math.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).