Python math.ulp()-Funktion

Python math 模块Python math-Modul


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

import math

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

import math

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

import math

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

import math

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

import math

# Ü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

Python math 模块Python math-Modul

Andere Erweiterungen