Python math.ulp()-Funktion
Bei Gleitkommaberechnungen ist es sehr wichtig,die Genauigkeitsbeschränkungen von Gleitkommazahlenzu verstehen. ULP (Unit in the Last Place) ist die grundlegende Einheit zur Messung der Genauigkeit von Gleitkommazahlen.
math.ulp()ist eine in Python 3.9 eingeführte Funktion, die verwendet wird, um diekleinste signifikante Gleitkommaeinheit(ULP) zurückzugeben, also den Abstand von dieser Zahl zur nächsten darstellbaren Gleitkommazahl.
Wortdefinition: ulpist die Abkürzung für "Unit in the Last Place", was "die Einheit der letzten Stelle" bedeutet.
Grundlegende Syntax und Parameter
Syntaxformat
import math math.ulp(x)
Parameterbeschreibung
- x: Gleitkommazahl
Rückgabewert
Gibt den ULP-Wert von x zurück, das heißt, die Differenz zwischen x und der nächsten darstellbaren Gleitkommazahl
Beispiele
Beispiel 1: Grundlegende Verwendung
Beispiel
print("ULP von 1.0:", math.ulp(1.0))
print("ULP von 2.0:", math.ulp(2.0))
print("ULP von 100.0:", math.ulp(100.0))
print("ULP von 0.0:", math.ulp(0.0))
print("Kleinste positive Zahl:", math.ulp(float.min)
Ausgabe:
1.0 的 ULP: 2.220446049250313e-16 2.0 的 ULP: 4.440892098500626e-16 100.0 的 ULP: 2.8421709430404007e-14 0.0 的 ULP: 5e-324
Beispiel 2: ULP für verschiedene Werte
Beispiel
values = [0.1, 0.5, 1.0, 1.5, 2.0, 10.0, 100.0, 1000.0]
print("ULP für verschiedene Werte:")
for x in values:
print(f" ULP({x}) = {math.ulp(x)}")
Ausgabe:
不同数值的 ULP: ULP(0.1) = 1.3877787807814457e-17 ULP(0.5) = 1.3877787807814457e-16 ULP(1.0) = 2.220446049250313e-16 ULP(1.5) = 2.220446049250313e-16 ULP(2.0) = 4.440892098500626e-16 U浮点 10.0: 2.220446049250313e-15 ULP(100.0) = 2.8421709430404007e-14 ULP(1000.0) = 2.2737367544323206e-13
Beispiel 3: Spezielle Werte
Beispiel
print("Unendlich:", math.ulp(math.inf))
print("Größte endliche Zahl:", math.ulp(sys.float_info.max))
print("Negative Zahl:", math.ulp(-1.0))
print("Subnormale Zahl:", math.ulp(1e-310))
Ausgabe:
无穷大: inf 最大有限数: inf 负数: 2.220446049250313e-16 次正规数: 5e-324
Beispiel 4: Erkennung der Gleitkomma-Genauigkeit
Beispiel
def check_precision(x):
"""Erkennt Gleitkomma-Genauigkeit"""
ulp = math.ulp(x)
relative_error = ulp / x
print(f"x = {x}")
print(f" ULP = {ulp}")
print(f" Relativer Fehler ≈ {relative_error:.2e}")
print(f" Signifikante Stellen ≈ {-math.log2(relative_error):.1f}")
print()
check_precision(1.0)
check_precision(1000000.0)
Ausgabe:
x = 1.0 ULP = 2.220446049250313e-16 相对误差 ≈ 2.22e-16 有效位数 ≈ 52.0 x = 1000000.0 ULP = 1.907344663e-13 相对误差 ≈ 1.91e-13 有效位数 ≈ 52.0
Beispiel 5: Kombination mit nextafter
Beispiel
# Überprüfen: nextafter(x, inf) - x = ULP(x)
x = 1.0
next_val = math.nextafter(x, math.inf)
ulp_calc = math.ulp(x)
direct_diff = next_val - x
print(f"x = {x}")
print(f"nextafter(x, inf) - x = {direct_diff}")
print(f"math.ulp(x) = {ulp_calc}")
print(f"Gleich: {direct_diff == ulp_calc}")
Ausgabe:
x = 1.0 nextafter(x, inf) - x = 2.220446049250313e-16 math.ulp(x) = 2.220 double 000001e-16 两者相等: True
Hinweis: math.ulp(x) ist äquivalent zu |nextafter(x, inf) - x|
Anwendungsszenarien
- Fehleranalyse numerischer Algorithmen
- Erkennung der Gleitkommapräzision
- Toleranzeinstellung im wissenschaftlichen Rechnen
- Bestimmen eines geeigneten Epsilons beim Vergleich von Gleitkommazahlen
Hinweise
- Diese Funktion ist nur in Python 3.9+ verfügbar
- Der ULP-Wert nimmt zu, wenn die Zahl zunimmt
- Das ULP von inf ist ebenfalls inf
Andere Erweiterungen
Python math-Modul