Đối tượng dấu phẩy động

type PyFloatObject

Kiểu con này của PyObject đại diện cho một đối tượng dấu phẩy động Python.

PyTypeObject PyFloat_Type
Một phần của ABI ổn định.

Phiên bản PyTypeObject này đại diện cho kiểu dấu phẩy động của Python. Đây là đối tượng tương tự như float trong lớp Python.

int PyFloat_Check(PyObject *p)

Trả về true nếu đối số của nó là PyFloatObject hoặc kiểu con của PyFloatObject. 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à PyFloatObject nhưng không phải là kiểu con của PyFloatObject. 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 PyFloatObject dựa trên giá trị chuỗi trong str hoặc NULL khi 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 PyFloatObject từ v hoặc NULL khi 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.0 khi thất bại, vì vậy bạn nên gọi PyErr_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 INFINITY từ 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 NAN từ 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_MATH_E

Định nghĩa (chính xác cho loại double) của hằng số math.e.

Py_MATH_El

Định nghĩa có độ chính xác cao (dài gấp đôi) của hằng số e.

Py_MATH_PI

Định nghĩa (chính xác cho loại double) của hằng số math.pi.

Py_MATH_PIl

Định nghĩa có độ chính xác cao (dài gấp đôi) của hằng số pi.

Py_MATH_TAU

Định nghĩa (chính xác cho loại double) của hằng số math.tau.

Added in version 3.6.

Py_RETURN_NAN

Trả về math.nan từ 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.inf hoặc -math.inf từ 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ề 1 nế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ề 0 nế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ề 1 nếu số dấu phẩy động X đã cho là vô cùng dương hoặc âm. Trả về 0 nế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ề 1 nếu số dấu phẩy động X đã cho là giá trị không phải số (NaN). Trả về 0 nế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+6p+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.0+0.0 tạ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+6p+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.0PyErr_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.