Skip to content

Maximale und minimale Float-Werte in Python

Python

In Python ist der Gleitkommazahltyp float eine 64-Bit-Darstellung einer Gleitkommazahl mit doppelter Genauigkeit, die Double in anderen Programmiersprachen wie C entspricht.

In diesem Artikel WIRD erläutert, wie SIE den Bereich (Maximal- und Minimalwerte) erhalten und überprüfen, den Float in Python darstellen kann.

In vielen Umgebungen ist die Reichweite wie folgt.

-1.7976931348623157e+308 <= f <= 1.7976931348623157e+308

Dieser Artikel hat folgenden Inhalt.

  • Float ist eine Fließkommazahl mit doppelter Genauigkeit in Python
  • Informationen zum Schwimmer:sys.float_info
  • Der maximale Wert, den Float darstellen kann:sys.float_info.max
  • Der minimale Wert, den Float darstellen kann
    • Der minimale negative Wert
    • Der minimale positive normalisierte Wert:sys.float_info.min
    • Der minimale positive denormalisierte Wert

Beachten Sie, dass es in Python3 keine Begrenzung für den Integer-Typ int gibt.

Der Float-Typ hat auch einen speziellen Wert, inf, der für unendlich steht.

Float ist eine Fließkommazahl mit doppelter Genauigkeit in Python

In Python werden Fließkommazahlen normalerweise mit dem Double der C-Sprache implementiert, wie in der offiziellen Dokumentation beschrieben.

Fließkommazahlen werden normalerweise mit double in C implementiert;
Eingebaute Typen – Dokumentation zu Python 3.9.7

Sofern SIE keine spezielle Implementierung verwenden, sterben Nicht CPython ist, can SIE davon ausgehen, dass doppelt verwendet WIRD. SIE can sterben tatsächliche Genauigkeit überprüfen, indem Sie sys.float_info wie unten beschrieben verwenden.

Gleitkommazahl mit doppelter Genauigkeit Double ist eine 64-Bit-Gleitkommazahldarstellung.

In vielen anderen Programmiersprachen wie C werden Gleitkommazahlen mit einfacher Genauigkeit als Float und Gleitkommazahlen mit doppelter Genauigkeit als Double used, aber in Python WIRD Double Precision Float, und es gibt keinen Typ mit einfacher Genauigkeit .

Beachten SIE, dass SIE in NumPy den Typ explizit mit der Anzahl der Bits angeben can, z. B. Float32, Float64.

Informationen zum Schwimmer:sys.float_info

Verwenden Sie sys.float_info, um Informationen über Float zu erhalten.

Das sys-Modul ist in der Standardbibliothek enthalten, sodass keine zusätzliche Installation erforderlich ist.

import sys

print(sys.float_info)
# sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

print(type(sys.float_info))
# <class 'sys.float_info'>

Sie können den Wert jedes Elements als Attribut abrufen, z. B. sys.float_info..

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

In der offiziellen Dokumentation finden Sie eine Liste der Elemente und ihre Erklärungen. Jedes Element entspricht einer Fließkommakonstante, die in der Standardheaderdatei float.h der Sprache C definiert ist.

Attribut Float.h-Makro Erläuterung
Epsilon DBL_EPSILON Differenz zwischen 1,0 und dem kleinsten Wert größer als 1,0, der als Float darstellbar ist
Graben DBL_DIG maximale Anzahl von Dezimalstellen, die in einem Float getreu dargestellt werden können
mant_dig DBL_MANT_DIG Float-Präzision: Die Anzahl der Basis-Radix-Ziffern in der Mantisse eines Floats
max DBL_MAX maximal darstellbarer positiver endlicher Float
max_exp DBL_MAX_EXP maximale Ganzzahl e, so dass Radix**(e-1) ein darstellbarer endlicher Float ist
max_10_exp DBL_MAX_10_EXP maximale ganze Zahl e, also dass 10**e im Bereich darstellbarer endlicher Gleitkommazahlen liegt
Mindest DBL_MIN minimal darstellbarer positiver normalisierter Float
min_exp DBL_MIN_EXP minimale Ganzzahl e, also dass Radix**(e-1) ein normalisierter Gleitkommawert ist
min_10_exp DBL_MIN_10_EXP minimale ganze Zahl e, sodass 10**e ein normalisierter Gleitkommawert ist
Wurzel FLT_RADIX Wurzel der Exponentendarstellung
Runden FLT_ROUNDS ganzzahlige Konstante, die den für arithmetische Operationen verwendeten Rundungsmodus darstellt. Dies spiegelt den Wert des Systemmakros FLT_ROUNDS beim Start des Interpreters wider

Der maximale Wert, den Float darstellen kann:sys.float_info.max

Den maximalen Wert, den Float darstellen kann, erhalten Sie mit sys.float_info.max. e+XXX bedeutet 10 hoch XXX. + ist optional.

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

Werte, die darüber liegen, werden als inf behandelt, was unendlich bedeutet. Weitere Informationen zu inf FINDEN SIE im following Artikel.

print(1.8e+308)
# inf

print(type(1.8e+308))
# <class 'float'>

Hexadezimal ist es wie folgt.

print(sys.float_info.max.hex())
# 0x1.fffffffffffffp+1023

Der minimale Wert, den Float darstellen kann

Der minimale negative Wert

Der minimale negative Wert, den Float darstellen kann, ist sys.float_info.max mit -. Kleinere Werte werden als negativ unendlich behandelt.

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

print(-1.8e+308)
# -inf

print(type(-1.8e+308))
# <class 'float'>

Der minimale positive normalisierte Wert:sys.float_info.min

Sie können den minimalen positiven normalisierten Wert mit sys.float_info.min erhalten.

print(sys.float_info.min)
# 2.2250738585072014e-308

Eine normalisierte Zahl ist ein Wert, dessen Exponententeil nicht 0 ist. sys.float_info.min ist wie folgt hexadezimal.

print(sys.float_info.min.hex())
# 0x1.0000000000000p-1022

Der minimale positive denormalisierte Wert

sys.float_info.min ist der minimale positiv normalisierte Wert.

Werte, deren Exponententeil 0 ist und deren Mantissenteil nicht 0 ist, werden als denormalisierte Zahlen bezeichnet.

Der minimale positive denormalisierte Wert kann wie folgt aus einer hexadezimalen Zeichenfolge konvertiert werden:

print(float.fromhex('0x0.0000000000001p-1022'))
# 5e-324

print(format(float.fromhex('0x0.0000000000001p-1022'), '.17'))
# 4.9406564584124654e-324

Ein kleinerer Wert wird als 0,0 angesehen.

print(1e-323)
# 1e-323

print(1e-324)
# 0.0

In Python 3.9 oder höher können Sie den minimalen positiven denormalisierten Wert erhalten, indem Sie 0,0 an die neu hinzugefügte Funktion math.ulp() übergeben.

import math

print(math.ulp(0.0))
# 5e-324

print(format(math.ulp(0.0), '.17'))
# 4.9406564584124654e-324