Wie man prüft, ob eine Zahl in Python einer anderen nahe kommt

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Labyrinth (Lab) lernen Sie, wie Sie in Python prüfen können, ob eine Zahl einer anderen nahe kommt. Dabei werden die Herausforderungen bei der Vergleich von Gleitkommazahlen (floating-point numbers) behandelt. Zunächst werden Sie das Konzept der numerischen Nähe verstehen und warum es wichtig ist, da Computer Gleitkommazahlen auf eine Weise darstellen, die zu unerwarteten Ergebnissen führen kann, wenn man sie auf Gleichheit vergleicht. Ein Python-Skript veranschaulicht dieses Konzept, indem es 0.1 + 0.2 berechnet und das Ergebnis mit 0.3 vergleicht, was zeigt, dass aufgrund der Gleitkommadarstellung Ungleichheit auftreten kann.

Anschließend wird das Labyrinth (Lab) Sie durch die Berechnung der absoluten Differenz zwischen zwei Zahlen führen, was ein Ansatz zur Bestimmung der Nähe ist. Schließlich lernen Sie, wie Sie die Funktion math.isclose() verwenden können, um robustere Vergleiche von Gleitkommazahlen durchzuführen, wobei sowohl relative als auch absolute Toleranzen berücksichtigt werden.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) 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{{"Wie man prüft, ob eine Zahl in Python einer anderen nahe kommt"}} python/conditional_statements -.-> lab-559546{{"Wie man prüft, ob eine Zahl in Python einer anderen nahe kommt"}} python/build_in_functions -.-> lab-559546{{"Wie man prüft, ob eine Zahl in Python einer anderen nahe kommt"}} end

Verständnis der numerischen Nähe

In diesem Schritt werden wir das Konzept der numerischen Nähe und seine Bedeutung in der Programmierung untersuchen, insbesondere wenn es um Gleitkommazahlen (floating-point numbers) geht. Aufgrund der Art und Weise, wie Computer Gleitkommazahlen darstellen, sind diese oft nur Näherungen von reellen Zahlen. Dies kann zu unerwarteten Ergebnissen führen, wenn man sie auf Gleichheit vergleicht.

Die numerische Nähe hilft uns zu bestimmen, ob zwei Zahlen "nahe genug" sind, um als gleich angesehen zu werden, auch wenn sie nicht exakt identisch sind. Dies ist besonders nützlich, wenn es um Berechnungen geht, die Gleitkommaarithmetik (floating-point arithmetic) beinhalten.

Beginnen wir, indem wir ein Python-Skript erstellen, um dieses Konzept zu veranschaulichen.

  1. Öffnen Sie den VS Code-Editor in der LabEx-Umgebung.

  2. Erstellen Sie eine neue Datei mit dem Namen proximity.py im Verzeichnis ~/project.

    ~/project/proximity.py
  3. Fügen Sie den folgenden Code in die Datei proximity.py ein:

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

    Dieses Skript berechnet 0.1 + 0.2 und vergleicht das Ergebnis mit 0.3.

  4. Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl im Terminal aus:

    python ~/project/proximity.py

    Sie sollten eine Ausgabe ähnlich der folgenden sehen:

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

    Wie Sie sehen können, sind num1 und num2 aufgrund der Gleitkommadarstellung nicht exakt gleich, obwohl sie mathematisch gleich sein sollten. Hier kommt das Konzept der numerischen Nähe ins Spiel. In den nächsten Schritten werden wir Möglichkeiten untersuchen, diese Situation zu behandeln.

Berechnung der absoluten Differenz

In diesem Schritt lernen wir, wie man die absolute Differenz zwischen zwei Zahlen berechnet. Die absolute Differenz ist der Betrag der Differenz zwischen zwei Zahlen, unabhängig von ihrer Reihenfolge. Mit anderen Worten, es ist die positive Differenz zwischen zwei Zahlen.

Wir können in Python die Funktion abs() verwenden, um die absolute Differenz zu berechnen. Die Funktion abs() gibt den absoluten Wert einer Zahl zurück.

Lassen Sie uns das Skript proximity.py aus dem vorherigen Schritt so ändern, dass es die absolute Differenz zwischen num1 und num2 berechnet.

  1. Öffnen Sie die Datei proximity.py im Verzeichnis ~/project mit dem VS Code-Editor.

  2. Ändern Sie den Code, um die absolute Differenz zu berechnen:

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

    In diesem Code berechnen wir die absolute Differenz zwischen num1 und num2 mithilfe der Funktion abs(). Anschließend vergleichen wir die absolute Differenz mit einem kleinen Toleranzwert (in diesem Fall 0,00001). Wenn die absolute Differenz kleiner als die Toleranz ist, betrachten wir die Zahlen als annähernd gleich.

  3. Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl im Terminal aus:

    python ~/project/proximity.py

    Sie sollten eine Ausgabe ähnlich der folgenden sehen:

    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

    Jetzt erkennt das Skript korrekt, dass num1 und num2 annähernd gleich sind, indem es die absolute Differenz und einen Toleranzwert berücksichtigt. Dieser Ansatz ist robuster als der direkte Vergleich von Gleitkommazahlen auf Gleichheit.

Verwendung von math.isclose() für Gleitkommazahlen

In diesem Schritt lernen wir, wie man die Funktion math.isclose() verwendet, um Gleitkommazahlen (floating-point numbers) auf annähernde Gleichheit zu vergleichen. Die Funktion math.isclose() ist eine robuster und empfohlene Methode zum Vergleich von Gleitkommazahlen als die Verwendung einer festen Toleranz.

Die Funktion math.isclose() nimmt zwei Zahlen als Eingabe und gibt True zurück, wenn sie innerhalb einer angegebenen Toleranz nahe beieinander liegen, und False sonst. Sie bietet zwei Toleranzparameter: rel_tol (relative Toleranz) und abs_tol (absolute Toleranz).

Lassen Sie uns das Skript proximity.py aus dem vorherigen Schritt so ändern, dass es die Funktion math.isclose() verwendet.

  1. Öffnen Sie die Datei proximity.py im Verzeichnis ~/project mit dem VS Code-Editor.

  2. Ändern Sie den Code, um math.isclose() zu verwenden:

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

    In diesem Code importieren wir das Modul math und verwenden die Funktion math.isclose(), um num1 und num2 zu vergleichen. Wir verwenden die Standardwerte für rel_tol und abs_tol, die für die meisten Fälle geeignet sind.

  3. Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl im Terminal aus:

    python ~/project/proximity.py

    Sie sollten eine Ausgabe ähnlich der folgenden sehen:

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

    Das Skript erkennt jetzt korrekt, dass num1 und num2 annähernd gleich sind, indem es die Funktion math.isclose() verwendet. Dies ist die empfohlene Methode, um Gleitkommazahlen auf annähernde Gleichheit in Python zu vergleichen.

Zusammenfassung

In diesem Lab (Praktikum) haben wir zunächst das Konzept der numerischen Nähe (numeric proximity) und seine Wichtigkeit beim Vergleich von Gleitkommazahlen in Python untersucht. Aufgrund der Art und Weise, wie Computer diese Zahlen darstellen, können direkte Gleichheitsvergleiche unzuverlässig sein. Wir haben ein Skript namens proximity.py erstellt, um dieses Problem zu demonstrieren. In diesem Skript wurde 0.1 + 0.2 mit 0.3 verglichen, was zeigte, dass sie aufgrund der Gleitkommadarstellung nicht exakt gleich sind.

Anschließend wurde im Lab die Notwendigkeit alternativer Methoden eingeführt, um zu bestimmen, ob zwei Zahlen "nahe genug" sind, um als gleich betrachtet zu werden. Dies leitete zu der Erkundung von Techniken wie der Berechnung der absoluten Differenz in den folgenden Schritten ein (Inhalt gekürzt).