Flyttalsobjekt

type PyFloatObject

Denna subtyp av PyObject representerar ett Python-objekt med flyttal.

PyTypeObject PyFloat_Type
En del av Stabil ABI.

Denna instans av PyTypeObject representerar Pythons flyttalstyp. Detta är samma objekt som float i Python-lagret.

int PyFloat_Check(PyObject *p)

Returnerar true om dess argument är ett PyFloatObject eller en subtyp av PyFloatObject. Denna funktion lyckas alltid.

int PyFloat_CheckExact(PyObject *p)

Returnerar true om dess argument är ett PyFloatObject, men inte en subtyp av PyFloatObject. Denna funktion lyckas alltid.

PyObject *PyFloat_FromString(PyObject *str)
Returnera värde: Ny referens. En del av Stabil ABI.

Skapa ett PyFloatObject-objekt baserat på strängvärdet i str, eller NULL om det misslyckas.

PyObject *PyFloat_FromDouble(double v)
Returnera värde: Ny referens. En del av Stabil ABI.

Skapa ett PyFloatObject-objekt från v, eller NULL om det misslyckas.

double PyFloat_AsDouble(PyObject *pyfloat)
En del av Stabil ABI.

Returnerar en C double-representation av innehållet i pyfloat. Om pyfloat inte är ett Python-objekt med flyttal utan har en __float__()-metod, kommer denna metod först att anropas för att konvertera pyfloat till ett flyttal. Om __float__() inte är definierad faller den tillbaka till __index__(). Denna metod returnerar -1.0 om den misslyckas, så man bör anropa PyErr_Occurred() för att kontrollera om det finns fel.

Ändrad i version 3.8: Använd __index__() om det finns tillgängligt.

double PyFloat_AS_DOUBLE(PyObject *pyfloat)

Returnerar en C double-representation av innehållet i pyfloat, men utan felkontroll.

PyObject *PyFloat_GetInfo(void)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar en structseq-instans som innehåller information om precision, minimi- och maximivärden för en float. Det är ett tunt omslag runt headerfilen float.h.

double PyFloat_GetMax()
En del av Stabil ABI.

Returnera den maximalt representerbara finita flottören DBL_MAX som C double.

double PyFloat_GetMin()
En del av Stabil ABI.

Returnera den minsta normaliserade positiva floaten DBL_MIN som C double.

Funktioner för packning och uppackning

Funktionerna pack och unpack ger ett effektivt plattformsoberoende sätt att lagra flyttalsvärden som bytesträngar. Pack-rutinerna producerar en bytes-sträng från en C double, och Unpack-rutinerna producerar en C double från en sådan bytes-sträng. Suffixet (2, 4 eller 8) anger antalet bytes i bytes-strängen.

På plattformar som verkar använda IEEE 754-format fungerar dessa funktioner genom att kopiera bitar. På andra plattformar är 2-byteformatet identiskt med IEEE 754 binary16 halvprecisionsformat, 4-byteformatet (32-bit) är identiskt med IEEE 754 binary32 enkelprecisionsformat och 8-byteformatet med IEEE 754 binary64 dubbelprecisionsformat, även om packningen av INF och NaN (om sådana finns på plattformen) inte hanteras korrekt, och försök att packa upp en bytessträng som innehåller en IEEE INF eller NaN kommer att ge upphov till ett undantag.

Observera att NaN-typen kanske inte bevaras på IEEE-plattformar (tysta NaN blir tysta), t.ex. på x86-system i 32-bitarsläge.

På icke-IEEE-plattformar med högre precision eller större dynamiskt omfång än IEEE 754 stöder kan inte alla värden packas; på icke-IEEE-plattformar med lägre precision eller mindre dynamiskt omfång kan inte alla värden packas upp. Vad som händer i sådana fall är delvis oavsiktligt (tyvärr).

Tillagd i version 3.11.

Packa funktioner

Packrutinerna skriver 2, 4 eller 8 byte, med början vid p. le är ett int-argument, icke-noll om du vill ha bytessträngen i little-endian-format (exponent sist, vid p+1, p+3, eller p+6 p+7), noll om du vill ha big-endian-format (exponent först, vid p). Konstanten PY_BIG_ENDIAN kan användas för att använda den inbyggda endian: den är lika med 1 på big endian-processor, eller 0 på little endian-processor.

Returvärde: 0 om allt är OK, -1 om fel (och ett undantag anges, troligen OverflowError).

Det finns två problem på plattformar som inte är IEEE:

  • Vad detta gör är odefinierat om x är ett NaN eller oändligt.

  • -0.0 och +0.0 ger samma bytessträng.

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

Packa en C-dubbel som IEEE 754 binär16 halvprecisionsformat.

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

Packa en C-dubbel i formatet IEEE 754 binary32 med enkel precision.

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

Packa en C-dubbel i IEEE 754 binary64 dubbelprecisionsformat.

Packa upp funktioner

Uppackningsrutinerna läser 2, 4 eller 8 byte, med början vid p. le är ett int-argument, icke-noll om bytessträngen är i little-endian-format (exponent sist, vid p+1, p+3 eller p+6 och p+7), noll om big-endian (exponent först, vid p). Konstanten PY_BIG_ENDIAN kan användas för att använda den ursprungliga endian: den är lika med 1 på big endian-processor, eller 0 på little endian-processor.

Returvärde: Den uppackade dubbelteckningen. Vid fel är detta -1.0 och PyErr_Occurred() är true (och ett undantag anges, troligen OverflowError).

Observera att på en icke-IEEE-plattform kommer detta att vägra att packa upp en bytessträng som representerar ett NaN eller oändlighet.

double PyFloat_Unpack2(const char *p, int le)

Packa upp IEEE 754 binary16 halvprecisionsformat som en C-dubbel.

double PyFloat_Unpack4(const char *p, int le)

Packa upp IEEE 754 binary32-formatet med enkel precision som en C-dubbel.

double PyFloat_Unpack8(const char *p, int le)

Packa upp IEEE 754 binary64 dubbelprecisionsformat som en C-dubbel.