Comment vérifier si un nombre est proche d'un autre en Python

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à vérifier si un nombre est proche d'un autre en Python, en abordant les défis liés aux comparaisons de nombres à virgule flottante. Vous commencerez par comprendre le concept de proximité numérique et son importance en raison de la manière dont les ordinateurs représentent les nombres à virgule flottante, ce qui peut entraîner des résultats inattendus lors de la comparaison de ces nombres pour vérifier leur égalité. Un script Python illustrera ce concept en calculant 0.1 + 0.2 et en comparant le résultat à 0.3, démontrant le potentiel d'inégalité dû à la représentation des nombres à virgule flottante.

Le laboratoire vous guidera ensuite dans le calcul de la différence absolue entre deux nombres, une approche pour déterminer la proximité. Enfin, vous apprendrez à utiliser la fonction math.isclose() pour des comparaisons plus robustes de nombres à virgule flottante, en tenant compte à la fois des tolérances relatives et absolues.


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{{"Comment vérifier si un nombre est proche d'un autre en Python"}} python/conditional_statements -.-> lab-559546{{"Comment vérifier si un nombre est proche d'un autre en Python"}} python/build_in_functions -.-> lab-559546{{"Comment vérifier si un nombre est proche d'un autre en Python"}} end

Comprendre la proximité numérique

Dans cette étape, nous allons explorer le concept de proximité numérique et son importance en programmation, en particulier lorsqu'il s'agit de nombres à virgule flottante. En raison de la manière dont les ordinateurs représentent les nombres à virgule flottante, ceux-ci sont souvent des approximations de nombres réels. Cela peut entraîner des résultats inattendus lors de la comparaison de ces nombres pour vérifier leur égalité.

La proximité numérique nous aide à déterminer si deux nombres sont « suffisamment proches » pour être considérés comme égaux, même s'ils ne sont pas exactement identiques. Cela est particulièrement utile lorsqu'il s'agit de calculs impliquant des opérations arithmétiques sur des nombres à virgule flottante.

Commençons par créer un script Python pour illustrer ce concept.

  1. Ouvrez l'éditeur VS Code dans l'environnement LabEx.

  2. Créez un nouveau fichier nommé proximity.py dans le répertoire ~/project.

    ~/project/proximity.py
  3. Ajoutez le code suivant à 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")

    Ce script calcule 0.1 + 0.2 et compare le résultat à 0.3.

  4. Enregistrez le fichier et exécutez-le en utilisant la commande suivante dans le terminal :

    python ~/project/proximity.py

    Vous devriez voir une sortie similaire à celle-ci :

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

    Comme vous pouvez le voir, num1 et num2 ne sont pas exactement égaux en raison de la représentation des nombres à virgule flottante, même si mathématiquement ils devraient l'être. C'est là que le concept de proximité numérique devient important. Dans les étapes suivantes, nous explorerons des moyens de gérer cette situation.

Calculer la différence absolue

Dans cette étape, nous allons apprendre à calculer la différence absolue entre deux nombres. La différence absolue est la grandeur de la différence entre deux nombres, indépendamment de leur ordre. En d'autres termes, c'est la différence positive entre deux nombres.

Nous pouvons utiliser la fonction abs() en Python pour calculer la différence absolue. La fonction abs() renvoie la valeur absolue d'un nombre.

Modifions le script proximity.py de l'étape précédente pour calculer la différence absolue entre num1 et num2.

  1. Ouvrez le fichier proximity.py dans le répertoire ~/project à l'aide de l'éditeur VS Code.

  2. Modifiez le code pour calculer la différence absolue :

    ## 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")

    Dans ce code, nous calculons la différence absolue entre num1 et num2 en utilisant la fonction abs(). Nous comparons ensuite la différence absolue à une petite valeur de tolérance (0,00001 dans ce cas). Si la différence absolue est inférieure à la tolérance, nous considérons les nombres comme approximativement égaux.

  3. Enregistrez le fichier et exécutez-le en utilisant la commande suivante dans le terminal :

    python ~/project/proximity.py

    Vous devriez voir une sortie similaire à celle-ci :

    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

    Maintenant, le script identifie correctement que num1 et num2 sont approximativement égaux en considérant la différence absolue et une valeur de tolérance. Cette approche est plus robuste que la comparaison directe d'égalité de nombres à virgule flottante.

Utiliser math.isclose() pour les nombres à virgule flottante

Dans cette étape, nous allons apprendre à utiliser la fonction math.isclose() pour comparer des nombres à virgule flottante en termes d'égalité approximative. La fonction math.isclose() est une méthode plus robuste et recommandée pour comparer des nombres à virgule flottante que d'utiliser une tolérance fixe.

La fonction math.isclose() prend deux nombres en entrée et renvoie True si ils sont proches l'un de l'autre dans une tolérance spécifiée, et False sinon. Elle propose deux paramètres de tolérance : rel_tol (tolérance relative) et abs_tol (tolérance absolue).

Modifions le script proximity.py de l'étape précédente pour utiliser la fonction math.isclose().

  1. Ouvrez le fichier proximity.py dans le répertoire ~/project à l'aide de l'éditeur VS Code.

  2. Modifiez le code pour utiliser 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")

    Dans ce code, nous importons le module math et utilisons la fonction math.isclose() pour comparer num1 et num2. Nous utilisons les valeurs par défaut pour rel_tol et abs_tol, qui conviennent dans la plupart des cas.

  3. Enregistrez le fichier et exécutez-le en utilisant la commande suivante dans le terminal :

    python ~/project/proximity.py

    Vous devriez voir une sortie similaire à celle-ci :

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

    Le script identifie maintenant correctement que num1 et num2 sont approximativement égaux en utilisant la fonction math.isclose(). C'est la méthode recommandée pour comparer des nombres à virgule flottante en termes d'égalité approximative en Python.

Résumé

Dans ce laboratoire (lab), nous avons commencé par explorer le concept de proximité numérique et son importance lors de la comparaison de nombres à virgule flottante en Python. En raison de la manière dont les ordinateurs représentent ces nombres, les comparaisons d'égalité directes peuvent être peu fiables. Nous avons créé un script proximity.py pour démontrer ce problème, où 0.1 + 0.2 a été comparé à 0.3, montrant qu'ils n'étaient pas exactement égaux en raison de la représentation des nombres à virgule flottante.

Le laboratoire a ensuite mis en évidence la nécessité de méthodes alternatives pour déterminer si deux nombres sont « suffisamment proches » pour être considérés comme égaux, préparant ainsi le terrain pour l'exploration de techniques telles que le calcul de la différence absolue dans les étapes suivantes (contenu tronqué).