Đối tượng dấu phẩy động¶
-
PyTypeObject PyFloat_Type¶
- Một phần của ABI ổn định.
Phiên bản
PyTypeObjectnày đại diện cho kiểu dấu phẩy động của Python. Đây là đối tượng tương tự nhưfloattrong lớp Python.
-
int PyFloat_Check(PyObject *p)¶
Trả về true nếu đối số của nó là
PyFloatObjecthoặc kiểu con củaPyFloatObject. Chức năng này luôn thành công.
-
int PyFloat_CheckExact(PyObject *p)¶
Trả về true nếu đối số của nó là
PyFloatObjectnhưng không phải là kiểu con củaPyFloatObject. Chức năng này luôn thành công.
-
PyObject *PyFloat_FromString(PyObject *str)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Tạo đối tượng
PyFloatObjectdựa trên giá trị chuỗi trong str hoặcNULLkhi bị lỗi.
-
PyObject *PyFloat_FromDouble(double v)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Tạo đối tượng
PyFloatObjecttừ v hoặcNULLkhi thất bại.
-
double PyFloat_AsDouble(PyObject *pyfloat)¶
- Một phần của ABI ổn định.
Trả về biểu diễn C double về nội dung của pyfloat. Nếu pyfloat không phải là đối tượng dấu phẩy động Python nhưng có phương thức
__float__(), thì trước tiên, phương thức này sẽ được gọi để chuyển pyfloat thành float. Nếu__float__()không được xác định thì nó sẽ quay trở lại__index__(). Phương thức này trả về-1.0khi thất bại, vì vậy bạn nên gọiPyErr_Occurred()để kiểm tra lỗi.Thay đổi trong phiên bản 3.8: Sử dụng
__index__()nếu có.
-
double PyFloat_AS_DOUBLE(PyObject *pyfloat)¶
Trả về biểu diễn C double về nội dung của pyfloat nhưng không kiểm tra lỗi.
-
PyObject *PyFloat_GetInfo(void)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Trả về một thể hiện structseq chứa thông tin về độ chính xác, giá trị tối thiểu và tối đa của số float. Đó là một lớp bọc mỏng bao quanh tệp tiêu đề
float.h.
-
double PyFloat_GetMax()¶
- Một phần của ABI ổn định.
Trả về số float hữu hạn tối đa có thể biểu thị DBL_MAX là C double.
-
double PyFloat_GetMin()¶
- Một phần của ABI ổn định.
Trả về số float dương chuẩn hóa tối thiểu DBL_MIN dưới dạng C double.
-
Py_INFINITY¶
Macro này mở rộng thành một biểu thức không đổi thuộc loại double, đại diện cho giá trị dương vô cực.
Trên hầu hết các nền tảng, điều này tương đương với macro
INFINITYtừ tiêu đề<math.h>tiêu chuẩn C11.
-
Py_NAN¶
Macro này mở rộng thành một biểu thức không đổi thuộc loại double, đại diện cho giá trị không phải là số (qNaN).
Trên hầu hết các nền tảng, điều này tương đương với macro
NANtừ tiêu đề<math.h>tiêu chuẩn C11.
-
Py_HUGE_VAL¶
Tương đương với
INFINITY.Sắp loại bỏ từ phiên bản 3.14: Macro là soft deprecated.
-
Py_RETURN_NAN¶
Trả về
math.nantừ một hàm.Trên hầu hết các nền tảng, điều này tương đương với
return PyFloat_FromDouble(NAN).
-
Py_RETURN_INF(sign)¶
Trả về
math.infhoặc-math.inftừ một hàm, tùy thuộc vào dấu của sign.Trên hầu hết các nền tảng, điều này tương đương với những điều sau:
trả về PyFloat_FromDouble(copysign(INFINITY, sign));
-
Py_IS_FINITE(X)¶
Trả về
1nếu số dấu phẩy động đã cho X là hữu hạn, nghĩa là nó bình thường, dưới chuẩn hoặc bằng 0, nhưng không phải là vô hạn hoặc NaN. Trả về0nếu không.Sắp loại bỏ từ phiên bản 3.14: Macro là soft deprecated. Thay vào đó hãy sử dụng
isfinite.
-
Py_IS_INFINITY(X)¶
Trả về
1nếu số dấu phẩy động X đã cho là vô cùng dương hoặc âm. Trả về0nếu không.Sắp loại bỏ từ phiên bản 3.14: Macro là soft deprecated. Thay vào đó hãy sử dụng
isinf.
-
Py_IS_NAN(X)¶
Trả về
1nếu số dấu phẩy động X đã cho là giá trị không phải số (NaN). Trả về0nếu không.Sắp loại bỏ từ phiên bản 3.14: Macro là soft deprecated. Thay vào đó hãy sử dụng
isnan.
Chức năng đóng gói và giải nén¶
Các hàm đóng gói và giải nén cung cấp một cách hiệu quả, độc lập với nền tảng để lưu trữ các giá trị dấu phẩy động dưới dạng chuỗi byte. Các quy trình Gói tạo ra một chuỗi byte từ một chuỗi byte C double và các quy trình Giải nén tạo ra một chuỗi C double từ một chuỗi byte như vậy. Hậu tố (2, 4 hoặc 8) chỉ định số byte trong chuỗi byte.
Trên các nền tảng dường như sử dụng định dạng IEEE 754, các chức năng này hoạt động bằng cách sao chép bit. Trên các nền tảng khác, định dạng 2 byte giống với định dạng nửa chính xác IEEE 754 nhị phân16, định dạng 4 byte (32 bit) giống hệt với định dạng chính xác đơn IEEE 754 nhị phân32 và định dạng 8 byte cho định dạng chính xác kép IEEE 754 nhị phân64, mặc dù việc đóng gói INF và NaN (nếu những thứ đó tồn tại trên nền tảng) không được xử lý một cách chính xác và việc cố gắng giải nén một chuỗi byte chứa IEEE INF hoặc NaN sẽ đưa ra một ngoại lệ.
Lưu ý rằng loại NaN có thể không được giữ nguyên trên nền tảng IEEE (NaN báo hiệu trở thành NaN yên tĩnh), ví dụ như trên hệ thống x86 ở chế độ 32 bit.
Trên các nền tảng không phải IEEE có độ chính xác cao hơn hoặc dải động lớn hơn mức hỗ trợ của IEEE 754, không phải tất cả các giá trị đều có thể được đóng gói; trên các nền tảng không phải IEEE có độ chính xác kém hơn hoặc dải động nhỏ hơn, không phải tất cả các giá trị đều có thể được giải nén. Những gì xảy ra trong những trường hợp như vậy một phần là ngẫu nhiên (than ôi).
Added in version 3.11.
Gói chức năng¶
Các quy trình đóng gói ghi 2, 4 hoặc 8 byte, bắt đầu từ p. le là một đối số int, khác 0 nếu bạn muốn chuỗi byte ở định dạng endian nhỏ (số mũ cuối cùng, tại p+1, p+3 hoặc p+6 và p+7), 0 nếu bạn muốn định dạng endian lớn (số mũ đầu tiên, tại p). Hằng số PY_BIG_ENDIAN có thể được sử dụng để sử dụng endian gốc: nó bằng 1 trên bộ xử lý endian lớn hoặc 0 trên bộ xử lý endian nhỏ.
Giá trị trả về: 0 nếu tất cả đều ổn, -1 nếu có lỗi (và một ngoại lệ được đặt, rất có thể là OverflowError).
Có hai vấn đề trên nền tảng không phải IEEE:
Điều này không được xác định nếu x là NaN hoặc vô cùng.
-0.0và+0.0tạo ra cùng một chuỗi byte.
-
int PyFloat_Pack2(double x, char *p, int le)¶
Đóng gói C double ở định dạng nửa chính xác IEEE 754 nhị phân16.
-
int PyFloat_Pack4(double x, char *p, int le)¶
Đóng gói C double dưới dạng định dạng chính xác đơn IEEE 754 nhị phân32.
-
int PyFloat_Pack8(double x, char *p, int le)¶
Đóng gói C double dưới dạng định dạng chính xác kép IEEE 754 nhị phân64.
Giải nén chức năng¶
Quy trình giải nén đọc 2, 4 hoặc 8 byte, bắt đầu từ p. le là một đối số int, khác 0 nếu chuỗi byte ở định dạng endian nhỏ (số mũ cuối cùng, tại p+1, p+3 hoặc p+6 và p+7), 0 nếu endian lớn (số mũ đầu tiên, tại p). Hằng số PY_BIG_ENDIAN có thể được sử dụng để sử dụng endian gốc: nó bằng 1 trên bộ xử lý endian lớn hoặc 0 trên bộ xử lý endian nhỏ.
Giá trị trả về: Đã giải nén gấp đôi. Do nhầm lẫn, đây là -1.0 và PyErr_Occurred() là đúng (và một ngoại lệ đã được đặt, rất có thể là OverflowError).
Lưu ý rằng trên nền tảng không phải IEEE, thao tác này sẽ từ chối giải nén chuỗi byte đại diện cho NaN hoặc vô cùng.
-
double PyFloat_Unpack2(const char *p, int le)¶
Giải nén định dạng nửa chính xác IEEE 754 nhị phân16 dưới dạng C kép.
-
double PyFloat_Unpack4(const char *p, int le)¶
Giải nén định dạng chính xác đơn IEEE 754 nhị phân32 dưới dạng C kép.
-
double PyFloat_Unpack8(const char *p, int le)¶
Giải nén định dạng chính xác kép IEEE 754 nhị phân64 dưới dạng C kép.