Untersuchung der Fließkommadarstellung
In diesem Schritt werden Sie untersuchen, wie Fließkommazahlen in Python dargestellt werden und welche potenziellen Auswirkungen diese Darstellung auf numerische Vergleiche haben kann. Fließkommazahlen werden verwendet, um reelle Zahlen (Zahlen mit Dezimalpunkten) in Computern darzustellen. Aufgrund der Art und Weise, wie sie im Speicher gespeichert werden, sind sie jedoch oft nur Näherungen der tatsächlichen reellen Zahlen. Dies kann zu unerwarteten Ergebnissen bei Vergleichen führen.
Beginnen wir damit, eine Python-Datei namens float_representation.py
in Ihrem ~/project
-Verzeichnis mit dem VS Code-Editor zu erstellen.
## Create a floating-point number
x = 0.1 + 0.2
## Print the value of x
print(x)
Speichern Sie die Datei und führen Sie sie dann mit dem folgenden Befehl im Terminal aus:
python float_representation.py
Sie erwarten vielleicht, dass die Ausgabe 0.3
ist, aber Sie werden wahrscheinlich etwas wie Folgendes sehen:
0.30000000000000004
Dies liegt daran, dass 0.1
und 0.2
nicht exakt als Fließkommazahlen dargestellt werden können. Das Ergebnis der Addition ist eine Zahl, die sehr nahe an 0.3
liegt, aber nicht genau gleich ist.
Jetzt sehen wir uns an, wie diese Ungenauigkeit Vergleiche beeinflussen kann. Fügen Sie den folgenden Code Ihrer float_representation.py
-Datei hinzu:
## Create a floating-point number
x = 0.1 + 0.2
## Check if x is equal to 0.3
if x == 0.3:
print("x is equal to 0.3")
else:
print("x is not equal to 0.3")
Speichern Sie die Datei und führen Sie sie erneut aus:
python float_representation.py
Sie werden wahrscheinlich die folgende Ausgabe sehen:
x is not equal to 0.3
Dies liegt daran, dass x
aufgrund des Problems mit der Fließkommadarstellung nicht genau gleich 0.3
ist.
Um Fließkommazahlen genau zu vergleichen, sollten Sie einen Toleranzwert verwenden. Anstatt auf exakte Gleichheit zu prüfen, prüfen Sie, ob die absolute Differenz zwischen den beiden Zahlen kleiner als ein kleiner Toleranzwert ist.
Ändern Sie Ihre float_representation.py
-Datei, um eine Toleranz einzubeziehen:
## Create a floating-point number
x = 0.1 + 0.2
## Define a tolerance value
tolerance = 1e-9 ## A small value like 0.000000001
## Check if x is approximately equal to 0.3
if abs(x - 0.3) < tolerance:
print("x is approximately equal to 0.3")
else:
print("x is not approximately equal to 0.3")
Speichern Sie die Datei und führen Sie sie noch einmal aus:
python float_representation.py
Jetzt sollten Sie die folgende Ausgabe sehen:
x is approximately equal to 0.3
Durch die Verwendung einer Toleranz können Sie Fließkommazahlen trotz der inhärenten Ungenauigkeit in ihrer Darstellung genau vergleichen. Dies ist ein entscheidendes Konzept, das Sie verstehen müssen, wenn Sie mit Fließkommazahlen in Python und anderen Programmiersprachen arbeiten.