浮點物件¶
-
PyTypeObject PyFloat_Type¶
- 作為 穩定 ABI 的一部分。
此
PyTypeObject
例項表示 Python 浮點型別。這與 Python 層中的float
物件相同。
-
int PyFloat_Check(PyObject *p)¶
如果其引數是
PyFloatObject
或其子型別,則返回 true。此函式始終成功。
-
int PyFloat_CheckExact(PyObject *p)¶
如果其引數是
PyFloatObject
但不是其子型別,則返回 true。此函式始終成功。
-
PyObject *PyFloat_FromString(PyObject *str)¶
- 返回值: 新引用。 穩定ABI 的一部分。
根據 str 中的字串值建立一個
PyFloatObject
物件,失敗時返回NULL
。
-
PyObject *PyFloat_FromDouble(double v)¶
- 返回值: 新引用。 穩定ABI 的一部分。
從 v 建立一個
PyFloatObject
物件,失敗時返回NULL
。
-
double PyFloat_AsDouble(PyObject *pyfloat)¶
- 作為 穩定 ABI 的一部分。
返回 pyfloat 內容的 C double 表示。如果 pyfloat 不是 Python 浮點物件但具有
__float__()
方法,此方法將首先被呼叫以將 pyfloat 轉換為浮點數。如果未定義__float__()
,則回退到__index__()
。此方法失敗時返回-1.0
,因此應該呼叫PyErr_Occurred()
來檢查錯誤。3.8 版本發生變更: 使用
__index__()
(如果可用)。
-
PyObject *PyFloat_GetInfo(void)¶
- 返回值: 新引用。 穩定ABI 的一部分。
返回一個 structseq 例項,其中包含有關浮點數的精度、最小值和最大值的資訊。它是標頭檔案
float.h
的一個薄包裝器。
打包和解包函式¶
打包和解包函式提供了一種高效的平臺獨立方式,將浮點值儲存為位元組字串。打包例程從 C double 生成一個位元組字串,解包例程從這樣的位元組字串生成一個 C double。字尾(2、4 或 8)指定位元組字串中的位元組數。
在看起來使用 IEEE 754 格式的平臺上,這些函式透過複製位來工作。在其他平臺上,2 位元組格式與 IEEE 754 binary16 半精度格式相同,4 位元組格式(32 位)與 IEEE 754 binary32 單精度格式相同,8 位元組格式與 IEEE 754 binary64 雙精度格式相同,儘管 INF 和 NaN(如果此類事物存在於平臺上)的打包未正確處理,並且嘗試解包包含 IEEE INF 或 NaN 的位元組字串將引發異常。
請注意,在 IEEE 平臺上(例如在 32 位模式下的 x86 系統上),NaN 型別可能不會被保留(靜默 NaN 變為安靜)。
在精度或動態範圍大於 IEEE 754 支援的非 IEEE 平臺上,並非所有值都可以打包;在精度或動態範圍小於 IEEE 754 支援的非 IEEE 平臺上,並非所有值都可以解包。在這種情況下發生的事情部分是偶然的(可惜)。
在 3.11 版本中新增。
打包函式¶
打包例程從 p 開始寫入 2、4 或 8 個位元組。le 是一個 int 引數,如果您希望位元組字串採用小端格式(指數最後,在 p+1
、p+3
或 p+6
p+7
),則為非零;如果您希望採用大端格式(指數在前,在 p),則為零。PY_BIG_ENDIAN
常量可用於使用本機位元組序:在大端處理器上它等於 1
,在小端處理器上等於 0
。
返回值:如果一切正常,則為 0
;如果出錯,則為 -1
(並設定異常,最可能是 OverflowError
)。
在非 IEEE 平臺上存在兩個問題
如果 x 是 NaN 或無窮大,則此操作未定義。
-0.0
和+0.0
產生相同的位元組字串。
-
int PyFloat_Pack2(double x, char *p, int le)¶
將 C double 打包為 IEEE 754 binary16 半精度格式。
-
int PyFloat_Pack4(double x, char *p, int le)¶
將 C double 打包為 IEEE 754 binary32 單精度格式。
-
int PyFloat_Pack8(double x, char *p, int le)¶
將 C double 打包為 IEEE 754 binary64 雙精度格式。
解包函式¶
解包例程從 p 開始讀取 2、4 或 8 個位元組。le 是一個 int 引數,如果位元組字串採用小端格式(指數最後,在 p+1
、p+3
或 p+6
和 p+7
),則為非零;如果採用大端格式(指數在前,在 p),則為零。PY_BIG_ENDIAN
常量可用於使用本機位元組序:在大端處理器上它等於 1
,在小端處理器上等於 0
。
返回值:解包後的 double。出錯時,它為 -1.0
且 PyErr_Occurred()
為 true(並設定異常,最可能是 OverflowError
)。
請注意,在非 IEEE 平臺上,這將拒絕解包表示 NaN 或無窮大的位元組字串。
-
double PyFloat_Unpack2(const char *p, int le)¶
將 IEEE 754 binary16 半精度格式解包為 C double。
-
double PyFloat_Unpack4(const char *p, int le)¶
將 IEEE 754 binary32 單精度格式解包為 C double。
-
double PyFloat_Unpack8(const char *p, int le)¶
將 IEEE 754 binary64 雙精度格式解包為 C double。