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.
Numerische Nähe verstehen
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.
Öffnen Sie den VS Code-Editor in der LabEx-Umgebung.
Erstellen Sie eine neue Datei mit dem Namen
proximity.pyim Verzeichnis~/project.~/project/proximity.pyFügen Sie den folgenden Code in die Datei
proximity.pyein:## 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.2und vergleicht das Ergebnis mit0.3.Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl im Terminal aus:
python ~/project/proximity.pySie sollten eine Ausgabe ähnlich der folgenden sehen:
num1 is: 0.30000000000000004 num2 is: 0.3 num1 and num2 are not equalWie Sie sehen können, sind
num1undnum2aufgrund 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.
Absolute Differenz berechnen
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.
Öffnen Sie die Datei
proximity.pyim Verzeichnis~/projectmit dem VS Code-Editor.Ä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
num1undnum2mithilfe der Funktionabs(). 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.Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl im Terminal aus:
python ~/project/proximity.pySie 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 equalJetzt erkennt das Skript korrekt, dass
num1undnum2annä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.
Verwenden von math.isclose() für Fließkommazahlen
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.
Öffnen Sie die Datei
proximity.pyim Verzeichnis~/projectmit dem VS Code-Editor.Ä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
mathund verwenden die Funktionmath.isclose(), umnum1undnum2zu vergleichen. Wir verwenden die Standardwerte fürrel_tolundabs_tol, die für die meisten Fälle geeignet sind.Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl im Terminal aus:
python ~/project/proximity.pySie sollten eine Ausgabe ähnlich der folgenden sehen:
num1 is: 0.30000000000000004 num2 is: 0.3 num1 and num2 are approximately equalDas Skript erkennt jetzt korrekt, dass
num1undnum2annähernd gleich sind, indem es die Funktionmath.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).



