
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