HOWTO · Python

Finden Sie den maximalen Float-Wert in Python

Dieser Artikel enthält zwei Methoden zum Ermitteln des Maximalwerts des Float-Datentyps in Python. Eine davon ist die Verwendung von float_info.max des sys-Moduls, während die zweite Möglichkeit darin besteht, die Funktion finfo() der numpy-Bibliothek zu verwenden.

Auf dieser Seite

Der eingebaute Typ float von Python hat auf der in diesem Beispiel gezeigten Laufzeit den größten endlichen Wert 1.7976931348623157e+308. Mit sys.float_info.max rufen Sie den Grenzwert Ihrer eigenen Laufzeit ab. Wenn Ihr Code NumPy verwendet, gibt numpy.finfo(dtype).max den Maximalwert des ausgewählten Gleitkomma-dtype zurück. Die Ausdrücke beziehen sich auf unterschiedliche Bereiche: Der eine liefert die Grenze des eingebauten Float-Typs von Python, der andere hängt vom übergebenen dtype ab.

Den größten endlichen Float-Wert mit sys.float_info.max ermitteln

Das Modul sys stellt float_info bereit, ein benanntes Tupel mit Angaben zur Darstellung des eingebauten Typs float, darunter dessen größtem endlichen Wert. Wählen Sie das Attribut max, wenn Sie nur die obere Grenze benötigen. Die Ausgabe des gesamten Tupels enthält zusätzliche Angaben, etwa zur Genauigkeit und zum kleinsten positiven normalisierten Wert.

Führen Sie diese Abfrage mit der Standardbibliothek aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import sys

print(sys.float_info.max)
1.7976931348623157e+308

Der Ausdruck liefert einen endlichen float-Wert von Python. Seine angezeigte Dezimaldarstellung lautet 1.7976931348623157e+308. Verwenden Sie diesen Wert, wenn Sie die obere endliche Grenze des eingebauten Typs benötigen, zum Beispiel als endlichen Platzhalterwert oder um den Wertebereich einer Berechnung zu prüfen. Er beschreibt nicht jeden numerischen Typ in Python: Für Ganzzahlen gilt beispielsweise nicht dieselbe Gleitkommagrenze.

numpy.finfo() für einen Gleitkommatyp verwenden

Fragen Sie bei NumPy-Arrays numpy.finfo() nach dem verwendeten dtype. Sein Attribut max ist der größte endliche Wert für diesen dtype. Das folgende Beispiel wählt numpy.float64; es ändert weder die Grenze des eingebauten Typs float von Python noch gibt es den Grenzwert für jeden NumPy-dtype an.

Führen Sie dieses Beispiel für numpy.float64 aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import numpy as np

print(np.finfo(np.float64).max)
1.7976931348623157e+308

Übergeben Sie einen anderen Gleitkomma-dtype, um dessen entsprechende Grenzwerte abzurufen. Das ist hilfreich, wenn Sie eine Obergrenze für eine Array-Berechnung auswählen oder prüfen möchten, welchen Wertebereich ein dtype unterstützt. Die Schreibweise finfo ist wichtig: numpy.finfo(dtype) ist die Funktion, die Maschinenlimits für Gleitkommatypen ausgibt. NumPy muss in der Umgebung installiert sein, in der Sie dieses Beispiel ausführen; für die oben gezeigte Methode mit der Standardbibliothek ist es nicht erforderlich.

Endlicher Höchstwert und Unendlichkeit

Der größte endliche Wert und positive Unendlichkeit sind verschieden. sys.float_info.max ist eine endliche Zahl. Dagegen stehen float('inf') und math.inf für positive Unendlichkeit, einen Sonderwert, der größer als jeder endliche Float-Wert ist. Verwenden Sie Unendlichkeit, wenn die Berechnung oder der Algorithmus ausdrücklich einen unbegrenzten Platzhalterwert benötigt. Wenn Sie den größten endlichen Wert brauchen, ist sie ungeeignet.

Führen Sie diesen Vergleich des endlichen Höchstwerts mit positiver Unendlichkeit aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import math
import sys

largest_finite = sys.float_info.max
positive_infinity = float("inf")

print(largest_finite)
print(math.inf == positive_infinity)
print(largest_finite < positive_infinity)
1.7976931348623157e+308
True
True

math.inf ist eine weitere Schreibweise für positive Unendlichkeit; -math.inf steht für negative Unendlichkeit. Keiner dieser Werte ist der größte endliche Float-Wert. Behalten Sie den Unterschied beim Benennen von Variablen und beim Prüfen von Ergebnissen im Blick: Eine Prüfung auf Endlichkeit und ein Vergleich mit dem größten endlichen Wert beantworten unterschiedliche Fragen. Für die eingebaute Grenze verwenden Sie sys.float_info.max; für einen NumPy-Gleitkommatyp verwenden Sie numpy.finfo(dtype).max mit dem dtype, den Ihre Daten tatsächlich verwenden.