Gleitkommaobjekte

type PyFloatObject

Dieser Untertyp von PyObject repräsentiert ein Python-Gleitkommaobjekt.

PyTypeObject PyFloat_Type
Teil der Stable ABI.

Diese Instanz von PyTypeObject repräsentiert den Python-Gleitkommatyp. Dies ist dasselbe Objekt wie float in der Python-Schicht.

int PyFloat_Check(PyObject *p)

Gibt wahr zurück, wenn das Argument ein PyFloatObject oder ein Untertyp von PyFloatObject ist. Diese Funktion ist immer erfolgreich.

int PyFloat_CheckExact(PyObject *p)

Gibt wahr zurück, wenn das Argument ein PyFloatObject ist, aber kein Untertyp von PyFloatObject. Diese Funktion ist immer erfolgreich.

PyObject *PyFloat_FromString(PyObject *str)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Erzeugt ein PyFloatObject-Objekt basierend auf dem Zeichenkettenwert in str, oder NULL im Fehlerfall.

PyObject *PyFloat_FromDouble(double v)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Erzeugt ein PyFloatObject-Objekt aus v, oder NULL im Fehlerfall.

double PyFloat_AsDouble(PyObject *pyfloat)
Teil der Stable ABI.

Gibt eine C double-Repräsentation des Inhalts von pyfloat zurück. Wenn pyfloat kein Python-Gleitkommaobjekt ist, aber eine __float__()-Methode hat, wird diese Methode zuerst aufgerufen, um pyfloat in einen Float zu konvertieren. Wenn __float__() nicht definiert ist, fällt sie auf __index__() zurück. Diese Methode gibt im Fehlerfall -1.0 zurück, daher sollte man PyErr_Occurred() aufrufen, um Fehler zu prüfen.

Geändert in Version 3.8: Verwendet __index__(), falls verfügbar.

double PyFloat_AS_DOUBLE(PyObject *pyfloat)

Gibt eine C double-Repräsentation des Inhalts von pyfloat zurück, aber ohne Fehlerprüfung.

PyObject *PyFloat_GetInfo(void)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt eine Structseq-Instanz zurück, die Informationen über die Genauigkeit, minimalen und maximalen Werte eines Floats enthält. Dies ist ein dünner Wrapper um die Header-Datei float.h.

double PyFloat_GetMax()
Teil der Stable ABI.

Gibt den maximal darstellbaren endlichen Float DBL_MAX als C double zurück.

double PyFloat_GetMin()
Teil der Stable ABI.

Gibt den minimalen normalisierten positiven Float DBL_MIN als C double zurück.

Pack- und Entpackfunktionen

Die Pack- und Entpackfunktionen bieten eine effiziente plattformunabhängige Möglichkeit, Gleitkommawerte als Byte-Strings zu speichern. Die Pack-Routinen erzeugen einen Byte-String aus einem C double, und die Entpack-Routinen erzeugen einen C double aus einem solchen Byte-String. Die Endung (2, 4 oder 8) gibt die Anzahl der Bytes im Byte-String an.

Auf Plattformen, die IEEE 754-Formate zu verwenden scheinen, arbeiten diese Funktionen durch Kopieren von Bits. Auf anderen Plattformen ist das 2-Byte-Format identisch mit dem IEEE 754 binary16 Half-Precision-Format, das 4-Byte-Format (32-Bit) ist identisch mit dem IEEE 754 binary32 Single-Precision-Format und das 8-Byte-Format mit dem IEEE 754 binary64 Double-Precision-Format, obwohl die Packung von INFs und NaNs (falls solche auf der Plattform existieren) nicht korrekt behandelt wird und der Versuch, einen Byte-String mit einem IEEE INF oder NaN zu entpacken, eine Ausnahme auslöst.

Beachten Sie, dass der NaN-Typ auf IEEE-Plattformen möglicherweise nicht erhalten bleibt (stille NaNs werden zu leisen), z. B. auf x86-Systemen im 32-Bit-Modus.

Auf Nicht-IEEE-Plattformen mit mehr Genauigkeit oder größerem dynamischen Bereich als IEEE 754 unterstützt, können nicht alle Werte gepackt werden; auf Nicht-IEEE-Plattformen mit weniger Genauigkeit oder kleinerem dynamischen Bereich können nicht alle Werte entpackt werden. Was in solchen Fällen passiert, ist teilweise zufällig (leider).

Hinzugefügt in Version 3.11.

Pack-Funktionen

Die Pack-Routinen schreiben 2, 4 oder 8 Bytes ab p. le ist ein int-Argument, ungleich Null, wenn Sie den Byte-String im Little-Endian-Format wünschen (Exponent zuletzt, an p+1, p+3 oder p+6, p+7), Null, wenn Sie Big-Endian wünschen (Exponent zuerst, bei p). Die Konstante PY_BIG_ENDIAN kann verwendet werden, um die native Endianness zu verwenden: sie ist gleich 1 auf Big-Endian-Prozessoren oder 0 auf Little-Endian-Prozessoren.

Rückgabewert: 0, wenn alles in Ordnung ist, -1 im Fehlerfall (und eine Ausnahme gesetzt ist, höchstwahrscheinlich OverflowError).

Auf Nicht-IEEE-Plattformen gibt es zwei Probleme

  • Was dies tut, ist undefiniert, wenn x ein NaN oder eine Unendlichkeit ist.

  • -0.0 und +0.0 erzeugen den gleichen Byte-String.

int PyFloat_Pack2(double x, char *p, int le)

Packt ein C double im IEEE 754 binary16 Half-Precision-Format.

int PyFloat_Pack4(double x, char *p, int le)

Packt ein C double im IEEE 754 binary32 Single-Precision-Format.

int PyFloat_Pack8(double x, char *p, int le)

Packt ein C double im IEEE 754 binary64 Double-Precision-Format.

Entpackfunktionen

Die Entpack-Routinen lesen 2, 4 oder 8 Bytes ab p. le ist ein int-Argument, ungleich Null, wenn der Byte-String im Little-Endian-Format ist (Exponent zuletzt, an p+1, p+3 oder p+6 und p+7), Null, wenn Big-Endian (Exponent zuerst, bei p). Die Konstante PY_BIG_ENDIAN kann verwendet werden, um die native Endianness zu verwenden: sie ist gleich 1 auf Big-Endian-Prozessoren oder 0 auf Little-Endian-Prozessoren.

Rückgabewert: Der entpackte double. Im Fehlerfall ist dies -1.0 und PyErr_Occurred() ist wahr (und eine Ausnahme gesetzt, höchstwahrscheinlich OverflowError).

Beachten Sie, dass auf einer Nicht-IEEE-Plattform das Entpacken eines Byte-Strings, der eine NaN oder Unendlichkeit darstellt, verweigert wird.

double PyFloat_Unpack2(const char *p, int le)

Entpackt das IEEE 754 binary16 Half-Precision-Format als C double.

double PyFloat_Unpack4(const char *p, int le)

Entpackt das IEEE 754 binary32 Single-Precision-Format als C double.

double PyFloat_Unpack8(const char *p, int le)

Entpackt das IEEE 754 binary64 Double-Precision-Format als C double.